[英]IIS 7.0 Web Service - Works on HTTP (80), Fails with error 404 on HTTPS (443)
Windows 2008上的IIS 7.0
WCF Web服務,VS 2010中的.NET 4
Web服務是通過發布安裝的,我在服務器上擁有完整的管理員權限。 有幾種復雜的方法,但是有一種簡單的方法可以返回構建版本。 如果我們可以解決這個問題,則可以全部修復-這是我的界面:
namespace MyNameSpace
{
[ServiceContract]
public interface WebInterface
{
[OperationContract]
[WebGet]
string GetVersion();
嘗試通過HTTP://連接,一切正常!
嘗試通過HTTPS://連接,但未找到404文件。
當瀏覽到HTTP和HTTPS上完全相同的URL時,我可以到達通用的“您已創建Web服務...”頁面,包括完整的Web服務路徑和C#通用示例代碼。
在C#中,我讀到證書可能會引起麻煩,並且我已經實現了委托重載來批准我們的服務器證書。
我懷疑Web.config文件中缺少一個或多個條目,但是我不知道從哪里開始。 我曾嘗試過Google搜索和Stack Overflow搜索,但沒有找到正確的搜索字詞組合來解決此特定問題。
網絡配置:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="HttpGetMetadata">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="LinkService" behaviorConfiguration="HttpGetMetadata">
<endpoint address="" contract="WebInterface" binding="basicHttpBinding" />
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
請幫助。
您正在使用basicHttpBinding
的默認值,並且該綁定的默認安全模式是None。 您需要定義綁定,並在配置中將安全模式設置為“ Transport
。 將Bindings部分添加到ServiceModel部分,如下所示:
<serviceModel>
<Bindings>
<basicHttpBinding name="secureBinding">
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</basicHttpBinding>
</Bindings>
</serviceModel>
然后,您需要通過bindingConfiguration
屬性將此綁定分配給端點,如下所示:
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="secureBinding"
contract="WebInterface" />
您可能還希望啟用httpsGetEnabled
:
<serviceMetadata httpGetEnabled="true"
httpsGetEnabled="true" />
請參閱帶有傳輸安全性的BasicBinding (這是示例代碼所基於的)。
您也可以使用諸如“ BasicHttpBinding WCF SSL”之類的術語和類似的內容在Google上進行搜索-網絡上有很多示例和信息,僅需使用正確的詞即可:)
另外,我不是100%確信transportClientCredential設置對您的情況是正確的(它可能需要是Certificate
),但是對於WCF,我對SSL所做的工作很少。
可能還有其他問題(例如,如何在計算機上設置IIS),但是以上是配置所需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.