WCF AJAX 服務建置於 https
今天接到同事來的一個求救,有一個產品基於 WCF 服務建置 https 時無法正常運行,原本以為簡單,但卡了一陣子,特別來筆記一下。
WCF 架站於 https
WCF 建置於 https 的資料超多超好查,微軟官方就有提供作法 How to: Configure an IIS-hosted WCF service with SSL - WCF | Microsoft Docs,看到這樣的資料立馬動手試試看。
重點是在 binding,要增加一組 basicHttpBinding
,並且設定到 endpoint 上。
1 | <bindings> |
設定完很開心的就打開系統,測試下去,還是一樣收到 404 的錯誤…
為了要確認問題,決定先建立一個新的 WCF 服務,並且加上同樣的設定,新的專案的確是可以順利運行。
馬上回過頭檢查系統的寫法,突然發現一個不一樣的地方,服務的 endpoint 有加上 behaviorConfiguration
並且裡面的內容有 Ajax 的字樣,以及 binding webHttpBinding
。
1 | <endpoint address="" behaviorConfiguration="MySecureWCFService.Service1AspNetAjaxBehavior" binding="webHttpBinding" contract="MySecureWCFService.Service1"/> |
趕快拿著剛建立的專案,再新增一個檔案 WCF Service (Ajax enabled) ,馬上看到設定出現在 web.config 中。先來查詢看看官方怎麼定義 binding (System-provided bindings - WCF | Microsoft Docs)。
Binding | Description |
---|---|
A binding that is suitable for communicating with WS-Basic Profile-conformant Web services, for example, ASP.NET Web services (ASMX)-based services. This binding uses HTTP as the transport and text/XML as the default message encoding. | |
WebHttpBinding | A binding used to configure endpoints for WCF Web services that are exposed through HTTP requests instead of SOAP messages. |
從文字描述來看,BasicHttpBinding
會回傳 xml 格式,那 WebhttpBinding
則是 json,可以確定 Ajax enabled 的意義是指這個服務 response 格式不同。
這樣就可以確定做法,要將官方給的範例調整為 WebHttpBinding
,並且設定到 endpoint 上,就可以打完收工。
1 | <bindings> |