我正在將HTTP(Dev/UAT)中的現有服務遷移到HTTPS(Production),並且在配置時遇到問題。這裏是我的web.config的system.serviceModel部分:WCF服務通過https返回404,但不是http
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
<services>
<service name="MyService">
<endpoint name="MyEndpoint" address="" binding="wsHttpBinding"
bindingConfiguration="secureBinding" contract="IMyService" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="secureBinding">
<security mode="Transport"></security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
我同時使用basicHttpBinding
和wsHttpBinding
試過,相同的結果:
- 我可以從我的SOAP調用服務使用
http://server.domain.com/MyService.svc
- 我可以用
https://server.domain.com/MyService.svc
- 打從瀏覽器服務客戶,我不能使用
https://server.domain.com/MyService.svc
從我的SOAP客戶端調用服務 - 呼叫總是呃與404: not found
羅斯。
我的HTTPS網站使用的是通過對企業域名的CA頒發的證書認證,我已經驗證了我有一個安裝了CA證書在Trusted Root Certification Authorities
我從中作出呼叫系統。
相關客戶端的代碼:
Service service = new Service();
service.Url = "http://server.domain.com/MyService.svc";
//service.Url = "https://server.domain.com/MyService.svc";
service.WebMethodCall();
EDIT
下面是WSDL的請求部分:
<wsdl:types/>
<wsdl:portType name="IMyService"/>
<wsdl:binding name="BasicHttpBinding_IMyService" type="tns:IMyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
</wsdl:binding>
<wsdl:service name="MyService">
<wsdl:port name="BasicHttpBinding_IMyService"
binding="tns:BasicHttpBinding_IMyService">
<soap:address location="http://server.domain.com/MyService.svc"/>
</wsdl:port>
</wsdl:service>
EDIT
更多信息:
當我改變serviceMetadata元素有httpGetEnabled="false"
和httpsGetEnabled="true"
了.svc頁面顯示我下面的鏈接:
https://boxname.domain.com/MyService.svc?wsdl
而不是預期的
https://server.domain.com/MyService.svc?wsdl
如果您在生產服務生成WSDL它包括HTTPS端口? – 2010-10-06 21:29:28
我將在編輯中添加關於WSDL的註釋 – arootbeer 2010-10-06 21:33:15
這是預期的,因爲您的serviceMetadata僅啓用httpGet而不啓用httpsGet。你也不能得到服務引用,因爲你不暴露mex端點。當您通過HTTP訪問WSDL時,重要的是WSDL的內容 - 尤其是描述服務和端口的最後一部分。 – 2010-10-06 21:50:48