【问题标题】:Basic Authentication with asmx web service使用 asmx Web 服务的基本身份验证
【发布时间】:2018-05-02 22:27:13
【问题描述】:

我正在尝试为 ASMXweb 服务实现基本授权。我在 VS2015 中创建了客户端作为服务参考。我以Asmx web service basic authentication 中的代码为例。

我在 ClientCredentials 中输入登录信息,如下所示

   Dim svc As New WebServiceSoapClient()
   svc.ClientCredentials.UserName.UserName = "userId"
   svc.ClientCredentials.UserName.Password = "i2awTieS0mdO"

我的问题是在 Web 服务的 Authorization HttpModule 中,这些凭据没有被传递给模块。有没有其他方法可以做到这一点?

【问题讨论】:

    标签: asp.net asmx


    【解决方案1】:

    我在How to add HTTP Header to SOAP Client 找到了部分答案。我必须在该页面上结合几个答案才能让它发挥作用。

        Dim svc As New WebServiceSoapClient()
        Dim responseService As SoapResponseObject
        Using (new OperationContextScope(svc.InnerChannel))
    
            Dim auth = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("userId:i2awTieS0mdO"))
    
            Dim requestMessage = New HttpRequestMessageProperty()
            requestMessage.Headers("Authorization") = auth
            OperationContext.Current.OutgoingMessageProperties(HttpRequestMessageProperty.Name) = requestMessage
    
            dim aMessageHeader = MessageHeader.CreateHeader("Authorization", "http://tempuri.org", auth)
            OperationContext.Current.OutgoingMessageHeaders.Add(aMessageHeader)
    
            responseService = svc.ListDistricts(requestService)
    
        End Using
    

    需要注意的一个关键点是soap 客户端调用必须在Using 语句中。在上面的代码中,这是倒数第二行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多