我试图在我的PC(IIS 7)上本地托管我的SSL WCF服务,由于某些原因我无法连接到它。我需要的是在调用某个函数之前使用SSL并发送信用证来验证用户。
当我连接到它时,我得到 没有端点监听https:// [计算机名称] /YYY.svc可以接受该消息。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。
内部消息是 远程服务器返回错误:(404)Not Found。
我注意到当我访问WSDL(通过https托管)时,端点地址不是http * S *,我认为这就是我的服务可能失败的原因。
<wsdl:service name="WSNAME">
<wsdl:port name="WSHttpBinding_INams" binding="tns:WSHttpBinding_INams">
<soap12:address location="http://[computer name]/YYY.svc" />
<wsa10:EndpointReference>
<wsa10:Address>http://[computer name]/YYY.svc</wsa10:Address>
<Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<Spn>host/[computername]</Spn>
</Identity>
</wsa10:EndpointReference>
<service behaviorConfiguration="test" name="NewServiceType">
<endpoint address="https://[computer name]/YYY.svc" binding="wsHttpBinding"
bindingConfiguration="WsBinding" name="WS" contract="Authentication2.INams" />
<endpoint address="mex" binding="mexHttpBinding" name="MX" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://[computer name]/XXX.svc" />
</baseAddresses>
</host>
任何人都可以指出我做错了什么吗?
<system.serviceModel>
<protocolMapping>
<remove scheme="http" />
<add scheme="http" binding="wsHttpBinding" />
</protocolMapping>
<bindings>
<wsHttpBinding>
<binding name="wsbinding">
<security mode="TransportWithMessageCredential">
<transport proxyCredentialType="Basic" />
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="NewServiceType">
<endpoint address="/WS" binding="wsHttpBinding"
bindingConfiguration="wsbinding" name="WS" contract="Authentication3.IService1" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
name="MX" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"
httpsGetUrl="https://[computerName]/Service1.svc" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
答案 0 :(得分:15)
发现它!!
WCF service returns 404 over https but not http
问题是我的服务元素名称是编辑器默认添加的“MyNewService”或默认名称。您必须使用完全限定名称..
<services>
<service name="[Namespace].[service class name]">
这花费了我超过2天的不断工作和研究。如果这适合你,请投票给那些家伙回答 - 没有人提到这一点..我不能因为我还是新的
答案 1 :(得分:2)
您的端点具有由WsBinding定义的bindingConfiguration属性。应该有一个定义此配置的web.config部分,包括要使用的安全模式(如果您想使用SSL,可能是transport或transportWithMessageCredential)。
例如:
<bindings>
<wsHttpBinding>
<binding name="WsBinding">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
此外,您还需要使用绑定侦听443来配置IIS,并引用适当命名的SSL证书。
对于凭证类型的Windows:
这对应于IIS中的集成Windows身份验证。设定时 对于此值,服务器也应该存在于Windows上 使用Kerberos协议作为其域控制器的域。 关于MSDN WCF transport security page
的详细信息
或者,您可以使用TransportWithMessageCredential。这使用SSL来加密连接,凭证在消息本身中传递(实际上是SOAP头中的用户名和密码)。在这种情况下,您的绑定配置看起来更像:
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="Username" />
</security>
然后,您需要在服务上定义密码验证程序行为以检查用户和密码。以下是有关此问题的更多信息:http://msdn.microsoft.com/en-us/library/aa354508.aspx