2013-10-24 71 views
0

我有一個自我託管的WCF服務,可以在使用wsHttpBinding或basicHttpBinding通過HTTP調用時正常工作。客戶端將通過互聯網包括Windows Phone設備,因爲他們不能使用wsHttpBinding,我們肯定需要比basicHttpBinding提供的更多的安全性,我嘗試過使用TransportWithMessageCredential。當使用HTTP時,一切正常,但是如果我將客戶端切換到HTTPS,我會在VS中獲得這些信息:「沒有端點在https://處偵聽......」「遠程服務器返回錯誤:NotFound。自託管的WCF服務不會通過HTTPS回覆,但HTTP可以運行

我啓用服務跟蹤和它說,它打開了HTTPS端口沒有任何問題,當我檢查的netstat -an它確認端口確實是開放的。對服務的HTTP和wsHttpBinding調用效果很好,它們會向日志生成事件,但這些HTTPS調用根本不會顯示出來。我也無法通過HTTPS獲取元數據,儘管它已啓用。

客戶端和服務器位於同一臺計算機上,證書是自簽名的,但可以與wsHttpBinding一起使用。

這裏的服務配置:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service behaviorConfiguration="xyzSecuredBehavior" name="x.x.xService"> 
     <endpoint address="/basic" binding="basicHttpBinding" bindingConfiguration="xyzBasicBinding" 
         contract="x.x.IxService" /> 
     <endpoint address="/secure" binding="basicHttpBinding" bindingConfiguration="xyzBasicBindingSecure" 
         contract="x.x.IxService" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="https://10.10.0.188:3003/xService" /> 
      <add baseAddress="http://10.10.0.188:3001/xService" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 

    <bindings> 
     <wsHttpBinding> 
     <binding name="customAuthenticationBinding" maxReceivedMessageSize="1000000" closeTimeout="23:59:59" openTimeout="23:59:59" receiveTimeout="23:59:59" sendTimeout="23:59:59"> 
      <readerQuotas maxDepth="1000000" maxStringContentLength="1000000" maxArrayLength="1000000" maxBytesPerRead="1000000" maxNameTableCharCount="1000000" /> 
      <security mode="Message"> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
     <basicHttpBinding> 
     <binding name="xyzBasicBinding" maxBufferSize="1000000" maxBufferPoolSize="1000000" maxReceivedMessageSize="1000000"> 
      <readerQuotas maxDepth="1000000" maxStringContentLength="1000000" maxArrayLength="1000000" maxBytesPerRead="1000000" maxNameTableCharCount="1000000" /> 
      <security mode="None"> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     <binding name="xyzBasicBindingSecure" maxBufferSize="1000000" maxBufferPoolSize="1000000" maxReceivedMessageSize="1000000"> 
      <readerQuotas maxDepth="1000000" maxStringContentLength="1000000" maxArrayLength="1000000" maxBytesPerRead="1000000" maxNameTableCharCount="1000000" /> 
      <security mode="TransportWithMessageCredential"> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

    <behaviors> 
     <serviceBehaviors> 

     <behavior name="xyzSecuredBehavior"> 
      <serviceCredentials> 
      <serviceCertificate findValue="xyzTestCert" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="z.z.AuthenticationManager, z.zz" /> 
      <windowsAuthentication allowAnonymousLogons="false"/> 
      </serviceCredentials> 
      <serviceAuthorization serviceAuthorizationManagerType="z.z.AuthorizationManager, z.zz" /> 
      <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="1000000000" /> 
     </behavior> 

     <behavior name="xyzBasicBehavior" > 
      <serviceAuthorization serviceAuthorizationManagerType="z.z.AuthorizationManager, z.zz" /> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="1000000000" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
</configuration> 

這是客戶端配置:

<configuration> 
<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IxService" maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647"> 
       <security mode="None" /> 
      </binding> 
      <binding name="BasicHttpBinding_IxService1" maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647"> 
       <security mode="TransportWithMessageCredential" /> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://10.10.0.188:3001/xService/basic" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IxService" 
      contract="ServiceReference1.IxService" name="BasicHttpBinding_IxService" /> 
     <endpoint address="https://10.10.0.188:3003/xService/secure" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IxService1" 
      contract="ServiceReference1.IxService" name="BasicHttpBinding_IxService1_secure" /> 
    </client> 
</system.serviceModel> 

,因爲我已經浪費了好兩天的任何幫助表示讚賞這和谷歌搜索和擺弄設置導致什麼都沒有。

+0

也許你可以試試縮小,保持'Transport'安全沒有用於HTTPS或僅使用'Transport'沒有消息或只是消息憑據的 –

+0

可能重複[WCF服務只需要HTTPS,但僅適用於HTTP](http://stackoverflow.com/questions/17105706/wcf-services-need-to-be-https-only-but-only-work-on-http) – Dhaval

+0

我嘗試了鏈接問題中提出的設置(它們與Rameez發佈的相同),但它仍然會給出相同的錯誤。 – sta

回答