您好,我有一个 wcf 服务,我需要调用,但它仍然以错误响应我:
System.ServiceModel.Security.MessageSecurityException:“HTTP 请求未经客户端身份验证方案“Ntlm”授权。从服务器收到的身份验证标头是“NTLM,协商”。'
我的代码如下所示:
创建客户端:
var binding = CreateBinding();
var endpoint = new EndpointAddress(_settings.Endpoint);
var client = new VoucherService.VoucherServiceClient(binding, endpoint);
装订:
private static BasicHttpBinding CreateBinding()
{
var binding = new BasicHttpBinding
{
ReceiveTimeout = TimeSpan.FromMinutes(10),
SendTimeout = TimeSpan.FromMinutes(10),
MaxReceivedMessageSize = 33554432,
TransferMode= TransferMode.Buffered,
Security = new BasicHttpSecurity
{
Mode = BasicHttpSecurityMode.TransportCredentialOnly,
Transport = new HttpTransportSecurity
{
ClientCredentialType = HttpClientCredentialType.Ntlm
}
}
};
binding.ReaderQuotas.MaxArrayLength = 32000;
return binding;
}
并致电:
var response = client.Send(/*some data*/)
我从中获取了配置的旧 .net4 解决方案。它在那里工作,我可以调用服务,但在具有相同配置的新 .net 6 解决方案中,我收到了如顶部所示的错误。你能给我建议一些我可以检查还缺少什么的东西吗?谢谢!
在 .NET 6.0 及以上版本中,调用 WCF 服务后通常会生成 Reference.cs 文件。
这个文件中有一个自生成的方法:
private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration)
我的建议是检查一下配置是否和WCF服务一样。最后使用无参构造函数
var client = new VoucherService.VoucherServiceClient();