2012-07-12 70 views
3

我已經查看了所有其他解決方案,但都沒有工作。我正在使用IIS託管WCF服務。以下是我的web.config(默認爲我增加了一個WCF服務):WCF無法通過HTTPS工作

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     <add assembly="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     </assemblies> 
    </compilation> 
    <customErrors mode="Off" /> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
</configuration> 

一切都很好,我可以使用http://www.domain.com/path/service.svchttps://www.domain.com/path/service.svc在瀏覽器中訪問我的WCF服務 - 現在我添加Web引用在Windows控制檯應用程序https://www.domain.com/path/service.svc和下面是我的app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="defaultBasicHttpBinding"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://www.domain.com/path/service.svc" binding="basicHttpBinding" bindingConfiguration="defaultBasicHttpBinding" contract="DomainExt.IExt" name="BasicHttpBinding_IExt" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

下面的代碼是我使用來測試服務內容:

public static String DoPing() 
{ 
    ExtClient client = new ExtClient("BasicHttpBinding_IExt", "https://www.domain.com/path/service.svc"); 
    return client.DoPing(); 
} 

我跑在此之後,我得到以下異常:

There was no endpoint listening at https://www.domain.com/path/service.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

內的異常張祖興:

"The remote server returned an error: (404) Not Found."

此服務工作正常通過HTTP,但未能對HTTPS。我怎樣才能解決這個問題?請注意,我正在使用Windows控制檯訪問此服務,而不是通過ASP.NET; ASP.NET只託管WCF服務。

+0

你在IIS中設置的綁定是什麼?如果您運行netmon,您是否看到嘗試的SSL握手? – 2012-07-12 22:34:50

+0

我有3個綁定。 「http domain.com 80 *」 - 「http(空白)80 10.0.3.3」 - 「http www.domain.com 80 *」 - 「https(空白)443 10.0.3.3」我對netmon不熟悉。 – 2012-07-12 23:56:33

+0

您是否在代碼中爲您的主機創建綁定和serviceEndpoints?如果是這樣,你可以發佈嗎? – 2012-07-13 17:09:34

回答

2

嘗試設置httpsGetEnabled = 「真」,而不是httpGetEnabled

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name=""> 
     <serviceMetadata httpsGetEnabled="true" /> 

編輯:我也很好奇,爲什麼你,如果你正在使用SSL選擇了basicHttpBinding的。爲什麼不使用WsHttpBinding?

EDIT2:你在主機配置文件中是否缺少<services>節點?我不認爲你可以創建一個沒有一個客戶端。你可以右鍵點擊你的app.config文件並在那裏配置它......類似這樣的:

<services> 
     <service behaviorConfiguration="MyServiceBehavior" name="MyService"> 
      <endpoint address="" binding="defaultBasicHttpBinding" bindingConfiguration="basicBinding" contract="IMyService" /> 

     </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
    <behavior name="MyServiceBehavior"> 
+0

我仍然遇到同樣的錯誤,「在https:// www.domain.com/path/service.svc'處沒有端點偵聽可以接受這個消息,這通常是由不正確的地址或SOAP引起的如果存在,請參閱InnerException以獲取更多詳細信息。「我從來沒有選擇BasicHttpBinding,而是自動創建的。我的知識是基於WCF的人,因爲我仍然在學習它。 – 2012-07-12 23:36:00

+0

你可以發佈你的整個主機配置文件嗎? – 2012-07-13 02:39:11

+0

主機配置文件是什麼意思? – 2012-07-13 05:09:01