c# - .NET SOAP 不在请求 header 中发送 BASIC 身份验证

标签 c# .net soap basic-authentication

为了与 SOAP 网络服务进行通信,我从 wsdl 文件中创建了由 SvcUtil.exe 创建的 C# 类。

将下面的请求发送到安全服务器(带有 BASIC 身份验证的 HTTPS)时,我收到 System.ServiceModel.Security.MessageSecurityException 并且在通过 Burp 代理检查 HTTP 请求时,我看到没有传递 BASIC 身份验证信息。 C# 代码中的 SOAP 请求是否缺少任何内容,或者 BASIC 身份验证不起作用可能是什么问题?

var binding = new WSHttpBinding();
binding.MessageEncoding = WSMessageEncoding.Mtom;

binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.Name = "BasicAuthSecured";

SearchServicePortClient searchClient = new SearchServicePortClient(binding,  new EndpointAddress("https://myUrl:Port/myService"));
searchClient.ClientCredentials.UserName.UserName = "username";
searchClient.ClientCredentials.UserName.Password = "pw";

query soap = new query();
//...

queryResponse response = searchClient.query(soap);

提前致谢

最佳答案

这是另一种方法,不知道它是否是最好的

using (var client = _clientFactory.GetClient())
{
    var credentials = Utils.EncodeTo64("user123:password");
    client.ChannelFactory.CreateChannel();
    using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
    {
        var httpRequestProperty = new HttpRequestMessageProperty();
        httpRequestProperty.Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
        OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
        //operation
        client.Send(request);
    }
}

关于c# - .NET SOAP 不在请求 header 中发送 BASIC 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544002/

相关文章:

c# - 计算机锁定时 WebClient.DownloadFile 挂起

.net - 在 SpecFlow 生成的文件 : Runtime Version: 4. 0.30319.468 与 4.0.30319.239 - 它来自哪里?

c# - 使用 C# 连接到网站的 SOAP API

c# - 使用反射创建 namespace 中所有类的列表,并将其强制转换为实型

c# - 如何获取进程 “type”(应用程序,后台进程或Windows进程)

c# - 由ArcGIS Engine SDK驱动的.NET程序报告找不到类型或 namespace “AxMapControl”

c# - 如何获得包含定义数量的空格的字符串?

c# - 在 C# 客户端中捕获 SOAP 消息

java - 忽略XML文件中的SOAP标记

c# - 适用于 C# 应用程序的 AnyCPU/x86/x64 及其 C++/CLI 依赖项