demoshop

demo, trying to be the best_

今天第一次寫 WCF 所以來記錄一下,之前參加就已經有初步的了解WCF是什麼東西了,一直也認為他不難,今天實作的時候也是還OK,可能是因為早就習慣了 MVC 的開發模式寫起 WCF 就有很多一樣的感覺,但是在程式都寫完後放上IIS才知道,真正的難題來了,接連遇到問題走一步卡一步感覺還真差勁。

demo廢言學習新技術最快的方式就是看影片,好在MSDN影片很豐富「MSDN 教學短片 -WCF」,我覺得看完第一個影片就能寫出點什麼了。

●我的需求很簡單,就是當成Web Service 來用,Code寫不久怎麼開始寫看上面的影片就知道了,我也不多說,先來說我一開始誤解的地方,因為我寫完後直接執行就很納悶就這樣一頁玩意要怎麼呼叫,他又沒有像 Web Service 一樣可以直接在網頁上呼叫,所以我卡了一下。


●在了解到喔,測試要自己寫 Console 以後就想說那就放上 IIS 跑吧慘劇就來了,一瀏覽就發生

HTTP 錯誤 404.17 - Not Found
要求的內容似乎是指令碼,因此靜態檔案處理常式便不會對它進行處理。

注意事項發生 404.3 的錯誤和這解法一樣,都是因為不知名的安裝順序造成「.svc」只有 .NET 4.0 才能用的局面因此我們必須手動加上 .NET 2.0的相關設定。


●點選「處理常式對應」


●看看相關設定都是 4.0的


●點選畫面右邊動作下的「新增 Managed 處理常式」


●新增一個 Managed 處理常式

  • 要求路徑:*.svc
  • 類型:System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
  • 名稱:svc-Integrated

●以為設定好了再次去瀏覽卻又看到了錯誤畫面

此集合已經包含具有配置 http 的位址,此集合中,每一配置最多只能有一個位址。


會發生這錯誤是因為這網站的確是繫結了兩個網址


●網路搜尋了一下解決方式有三種

  1. 就把繫結改成一個(這什麼爛解決方式.....
  2. 寫一段程式來處理這玩意兒(可以參考這裡
  3. 直接設定Web.Config(這是 demo 覺得比較正確的解法WCF的其中一個優點不就是什麼東西只需要改設定檔就可以改變了,所以我們就來設定 Web.config 吧

●通常加入了 WCF 以後 Web.config 最下面都會被加上相關宣告,因此就拉到最下面吧找到<system.serviceModel>
在下一行貼上

<serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://localhost/" />
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>

其中的http://localhost就是你要使用WCF的網址,如果你還是不了解相關位置可以參考下圖


demo廢言以上就是我在部屬WCF的時候遇到的問題,寫出來讓和我一樣的新手不會又跌跌撞撞的


分隔線

回應討論