Q:

Basic Authentication with asmx web service

I'm trying to implement Basic Authorization for an ASMXweb service.   I created the client as a service reference in VS2015.   I'm using code in Asmx web service basic authentication as an example. 
I'm entering login info in ClientCredentials as below
   Dim svc As New WebServiceSoapClient()
   svc. ClientCredentials. UserName. UserName = "userId"
   svc. ClientCredentials. UserName. Password = "i2awTieS0mdO"

My problem is that in the Authorization HttpModule in the web service, these credentials are not being passed to module.   Is there an alternate way to do this? 

A:

I found the parts answer at How to add HTTP Header to SOAP Client.   I had to combine a couple of answers on that page to get it to work. 
    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

One key thing to be aware of is that the soap client call has to be inside the Using statement.   In the above code, this is the next to last line.