在实现与WCF服务对话的客户端时遇到一些问题。这是另一家公司托管的WCF,因此我无法访问其代码。我使用Visual Studio中的Connected Service提供程序工具生成客户端代码,以便可以发出请求,并且在本地计算机上一切正常。我在开发环境中遇到问题,如果尝试与客户提出请求,则会收到以下错误:
The HTTP request was forbidden with client authentication scheme 'Anonymous'
我一直在查看由提供程序工具生成的客户端代码(很多代码),我认为它可能与以下代码块有关。
System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
result.MaxBufferSize = int.MaxValue;
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
result.MaxReceivedMessageSize = int.MaxValue;
result.AllowCookies = true;
result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;
return result;
答案 0 :(得分:3)
这更多地与公司网络中的防火墙规则相关。
我使用非授权代理存在相同的问题,但是使用ntlm ClientCredentialType
解决了安全代理问题
答案 1 :(得分:0)
result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;
使用HTTPS提供安全性。该服务必须配置有SSL证书。 SOAP消息使用HTTPS进行整体保护。客户端使用服务的SSL证书对服务进行身份验证。客户端身份验证是通过ClientCredentialType控制的。
答案 2 :(得分:0)
此错误通常表示WCF服务器使用证书对客户端进行身份验证。当服务器与客户端之间的信任关系尚未建立时,将发生此错误。
通常,我们需要提供要由服务器进行身份验证的客户端凭据,以便能够调用该服务。至于需要提供哪种凭据,则取决于服务器端的绑定信息。
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
即,上述错误表明服务器使用证书对客户端进行了身份验证。
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
关于使用证书对客户端进行身份验证,您可以参考下面的链接以获取详细信息。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transport-security-with-certificate-authentication
随时让我知道是否有什么可以帮助您的。
答案 3 :(得分:0)
感谢所有建议。这实际上是由我们组织内设置的防火墙规则引起的。将其删除后,代码即可按预期工作。