Asp.net 使用asmx web服务进行基本身份验证

Asp.net 使用asmx web服务进行基本身份验证,asp.net,asmx,Asp.net,Asmx,我正在尝试为ASMXweb服务实现基本授权。我在VS2015中创建了客户机作为服务引用。我以中的代码为例 我正在ClientCredentials中输入登录信息,如下所示 Dim svc As New WebServiceSoapClient() svc.ClientCredentials.UserName.UserName = "userId" svc.ClientCredentials.UserName.Password = "i2awTieS0mdO" 我的问题是,在w

我正在尝试为ASMXweb服务实现基本授权。我在VS2015中创建了客户机作为服务引用。我以中的代码为例

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

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

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

我在上找到了答案。我必须在那一页上把几个答案结合起来才能使它起作用

    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语句中。在上面的代码中,这是最后一行的下一行