2

我们有一个托管在 IIS 中的 WCF 服务,客户端 dll 正在尝试访问该服务。该服务在 IIS 中绑定以使用 HTTPS,并设置为忽略客户端证书,这可以正常工作,但需要 SSL 会导致问题。

我真的不明白的是,调用服务的方法之一工作得很好,但调用另一个方法不起作用,我收到以下错误:“HTTP 请求被客户端身份验证方案‘匿名’禁止。系统.Net.WebException:远程服务器返回错误:(403)禁止。”

这可能是什么原因造成的?我对 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());
4

1 回答 1

0

您可以通过更改绑定信息来解决它。将 TransportClientCredential Type 设置为证书以在 IIS SSL 设置中使用所需的证书。

如果是 Ws-Http,那就有点不同了。WCF WS 服务主机实际上正在检查传入的客户端请求证书是否存在于受信任的人中。所以远程证书应该出现在服务器的受信任的人身上。

或添加 CustomValidator 并覆盖该行为。

于 2015-05-25T14:43:43.140 回答