【问题标题】:The authentication header received from the server.. BASIC - WFC - NET CORE从服务器收到的身份验证标头.. BASIC - WFC - NET CORE
【发布时间】:2020-02-25 17:29:04
【问题描述】:

我使用 .NET CORE 使用 WCF(连接服务),我想调用 wfc 服务并发送 xml...但是在执行服务时, 这会引发下一个异常

“从服务器收到的身份验证标头是 'Basic realm="AXIS"'。”

当我在 SOAP UI 中运行服务时,我分配了基本授权选项,它运行良好......但是在这部分我不知道如何设置授权类型

我也没有任何配置xml文件,只有一个名为ConnectedService.json的json

代码:

var endpoint = new TestService.WebTest_Service.EndpointConfiguration();
var service = new TestService.WebTest_Service(endpoint);

string strXml = _getXml();
TestService.XML xml = new TestService.XML();
xml.document = strXml;

service.ClientCredentials.UserName.UserName = "username";
service.ClientCredentials.UserName.Password = "password";

var result = service.invokeAsync(xml); // => THROW ERROR

【问题讨论】:

    标签: wcf .net-core service


    【解决方案1】:

    首先,确保账号名和密码正确,也可以使用域/用户。

    client.ClientCredentials.UserName.UserName = @"domain\username";
    client.ClientCredentials.UserName.Password  = "password";
    

    其次,请检查自动生成的服务端点。它应该位于Reference.cs。构造函数中的参数是enum,表示应该使用哪个端点。

    ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(ServiceReference1.Service1Client.EndpointConfiguration.BasicHttpBinding_IService1);
    client.ClientCredentials.UserName.UserName = "administrator";
    client.ClientCredentials.UserName.Password = "abcd1234!";
    

    最后,我们还可以在soap请求中手动添加Basic Http header。

    client.ClientCredentials.UserName.UserName = "UserName";
                    client.ClientCredentials.UserName.Password = "Password";
    
                    using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
                    {
                        HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
                        httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(client.ClientCredentials.UserName.UserName + ":" + client.ClientCredentials.UserName.Password));
                        OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
    
                        // below is a sample call
                        int response = client.addNumbers(1, 2);
                        Console.WriteLine(response);
                        Console.ReadLine();
    
                    }
    

    如果问题仍然存在,请随时告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      相关资源
      最近更新 更多