【问题标题】:Consume WSDL that requires action level authorization in C#在 C# 中使用需要操作级别授权的 WSDL
【发布时间】:2013-02-14 02:56:18
【问题描述】:

我正在尝试使用第 3 方 WSDL。我已将其添加为服务参考。我像这样初始化客户端和查询参数:

var ltRequest = new SearchEmailAddressStatus 
            {
                 EmailAddress = emailAddressList.ToArray()
            };
var ltClient = new CommunicationPreferenceServiceClient
             {
                ClientCredentials =
                   {
                       UserName = 
                         {
                             UserName = ltProperties.CompanyCredential.UserName,
                             Password = ltProperties.CompanyCredential.Password
                         }
                     }
              };  
var ltResponse = ltClient.searchEmailAddressStatusWS(ltRequest);

在 Fiddler 中查看数据包后,我注意到 Auth 标头从未发送到服务器。有没有办法在我的请求中手动插入授权标头?

【问题讨论】:

    标签: c# soap visual-studio-2012 wsdl service-provider


    【解决方案1】:

    好的,经过大量挖掘,我找到了答案。声明客户端后,我使用了以下代码:

    using (var scope = new OperationContextScope(ltClient.InnerChannel))
    {
        var reqProperty = new HttpRequestMessageProperty();
        reqProperty.Headers[HttpRequestHeader.Authorization] = "Basic " 
                 + Convert.ToBase64String(Encoding.ASCII.GetBytes(
                   ltClient.ClientCredentials.UserName.UserName + ":" + 
                   ltClient.ClientCredentials.UserName.Password));
    
        OperationContext.Current
            .OutgoingMessageProperties[HttpRequestMessageProperty.Name] = reqProperty;
    
        var ltResponse = ltClient.searchEmailAddressStatusWS(ltRequest);
    }
    

    我相信这是在 wsdl 请求中获取自定义标头的最不脏的方法。如果有人有更好的方法,我很想听听。

    【讨论】:

    • 不,我就是这么干的。鉴于您正在传递凭据,我希望您使用传输级别的安全性。
    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多