我们在IIS中托管了一个客户端dll尝试访问的WCF服务。该服务绑定在IIS中以使用HTTPS,并设置为忽略客户端证书,这可以正常工作,但需要SSL导致问题。
我真的不明白的是,调用其中一个服务的方法工作正常,但调用另一个方法不起作用,我得到以下错误:“HTTP请求被禁止与客户端身份验证方案'匿名'.System.Net.WebException:远程服务器返回错误:(403)Forbidden。“
可能导致这种情况的原因是什么?我是WCF的新手,所以如果我遗漏任何内容或者是否有更多需要的信息,请告诉我。
以下是一些服务配置代码:
this.Description.Behaviors.Add(new FaultConversionErrorHandler());
this.Description.Behaviors.Add(new LoggingErrorHandler());
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
ServiceEndpoint endpoint = this.AddServiceEndpoint(typeof(ILicenseService), binding, String.Empty);
SecurityEndpointBehavior securityEndpointBehavior = new SecurityEndpointBehavior();
endpoint.Behaviors.Add(securityEndpointBehavior);
以下是客户端如何引用该服务:
EndpointAddress a = new EndpointAddress(licenseServiceUrl);
Binding b = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
LicenseServiceClient client = new LicenseServiceClient(b, a);
client.Endpoint.Behaviors.Add(new SecurityEndpointBehavior());
答案 0 :(得分:0)
您可以通过更改绑定信息来解决此问题。 将TransportClientCredential Type设置为证书以在IIS SSL设置中使用所需的证书。
如果是Ws-Http,那就有点不同了。 WCF WS-service主机实际上正在检查受信任人员中是否存在传入客户端请求证书。 因此,远程证书应该存在于服务器的可信任人员中。
或者添加CustomValidator并覆盖行为。