HTTP 请求未经客户端身份验证方案“Ntlm”的授权

问题描述 投票:0回答:1

您好,我有一个 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 解决方案中,我收到了如顶部所示的错误。你能给我建议一些我可以检查还缺少什么的东西吗?谢谢!

c# .net wcf
1个回答
0
投票

在 .NET 6.0 及以上版本中,调用 WCF 服务后通常会生成 Reference.cs 文件。

这个文件中有一个自生成的方法:

private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration)
我的建议是检查一下配置是否和WCF服务一样。

最后使用无参构造函数

var client = new VoucherService.VoucherServiceClient();
    
© www.soinside.com 2019 - 2024. All rights reserved.