2013-10-24 43 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

回答