从自动生成的 Web 服务代理类调用方法时出现以下错误:
System.ServiceModel.Security.MessageSecurityException 未处理
HResult=-2146233087 Message=HTTP 请求被客户端身份验证方案“匿名”禁止。源=mscorlib
ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System。 Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: System.Net.WebException HResult=-2146233079 Message=远程服务器返回错误:(403) 禁止。Source=System StackTrace:位于 System.ServiceModel.Channels.HttpChannelFactory'1 的 System.Net.HttpWebRequest.GetResponse()。
这是如何称呼它
X509Certificate2 x509Certificate = new X509Certificate2();
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = ((X509Certificate2Collection)store.Certificates).Find(X509FindType.FindByTimeValid, DateTime.Now, false);
X509Certificate2Collection collection1 = X509Certificate2UI.SelectFromCollection(collection, "Certificados disponiveis", "Selecione o certificado", X509SelectionFlag.SingleSelection);
x509Certificate = collection1[0];
LoteNFeSoapClient loteNFe = new LoteNFeSoapClient();
loteNFe.ClientCredentials.ClientCertificate.SetCertificate(x509Certificate.Subject, StoreLocation.CurrentUser, StoreName.My);
Retorno.Text = loteNFe.TesteEnvioLoteRPS(1, Assinado.Text);
我如何添加此 Web 服务参考:
在 MS Visual Studio 2013 社区中,Project > Add > Service Reference
:
Obs:这些是默认配置。这是一个市政网络服务,用于发送所提供的运输或物流服务的电子发票。
我读过添加证书所必需的地方,例如:
LoteNFeSoapClient loteNFe = new LoteNFeSoapClient();
loteNFe.ClientCertificates.Add(clientCertificate);
但这是不可能的,因为:
- 这个自动生成的 web 服务类不会继承自具有这种方法的
ClientCertificates.Add()
类HttpWebClientProtocol
,例如类。 LoteNFeSoapClient()
类已经从一个接口继承,该接口使消息契约匹配请求和响应之间的值。- 在 C# 中,一个类不能有多个基类。
那么,可以做些什么呢?提前致谢。