C# 连接到安全Web服务
我想连接由证书保护的web服务(作为服务引用) 为此,我正在这样做:C# 连接到安全Web服务,c#,wcf,web-services,certificate,wcf-security,C#,Wcf,Web Services,Certificate,Wcf Security,我想连接由证书保护的web服务(作为服务引用) 为此,我正在这样做: ServiceClient service = new ServiceClient(); service.ClientCredentials.ClientCertificate.SetCertificate (StoreLocation.CurrentUser, StoreName.Root, X509FindType.FindBySubjectName, "Subject Name"); Servic
ServiceClient service = new ServiceClient();
service.ClientCredentials.ClientCertificate.SetCertificate (StoreLocation.CurrentUser, StoreName.Root, X509FindType.FindBySubjectName, "Subject Name");
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidationCallBack);
service.SomeMethod();
private bool ValidationCallBack(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
return true;
}
当我调用service.SomeMethod()时代码>方法,它会引发异常:
“HTTP请求已被禁止
客户端身份验证方案
“匿名”
这个错误意味着什么?如何避免调用web服务方法
谢谢 根据我微弱的经验(这并不多),这意味着你的service.svc不向匿名用户开放,这让我很沮丧,因为我的所有站点都受到了NTLM保护,但是,出于某种原因,你的服务文件需要匿名你通过SSL进行连接是正确的(我假设您的服务器需要客户端证书,通常不是必需的),但看起来您并没有向web服务传递任何凭据
尝试添加以下内容:
service.Credentials = System.Net.CredentialCache.DefaultCredentials;
这将向服务传递当前登录用户的凭据
只要当前用户具有访问该服务的权限,它就应该允许您进入。如果对该服务具有权限的用户与当前登录的用户不同:
credentialCache cache = new CredentialCache();
cache.Add( new Uri(service.Url), // Web service URL
"Negotiate", // Kerberos or NTLM
new NetworkCredential("username", "password", "domainname") );
service.Credentials = cache;
如果使用代理,事情可能会变得更复杂
如果你需要更多的信息,这看起来是个不错的选择