使用 asmx web 服务的基本身份验证
Basic Authentication with asmx web service
我正在尝试为 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 中,这些凭据没有传递给模块。有替代方法吗?
我在 找到了部分答案。我必须在该页面上结合几个答案才能使其正常工作。
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 语句内。在上面的代码中,这是倒数第二行。
我正在尝试为 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 中,这些凭据没有传递给模块。有替代方法吗?
我在 找到了部分答案。我必须在该页面上结合几个答案才能使其正常工作。
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 语句内。在上面的代码中,这是倒数第二行。