【发布时间】:2017-05-26 01:36:29
【问题描述】:
在我的 WebApi 控制器中,我尝试调用 .asmx SOAP 服务。
我使用 VS2015 生成 SoapClient 代理作为服务参考。
我的主要问题是我需要将 Authorization 标头设置为包含 Bearer 令牌。
我想我有一个解决方案,使用@SimonRC 的答案here。我的代码如下所示:
using (OperationContextScope scope = new OperationContextScope(_client.InnerChannel))
{
var httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Bearer blahblahblah";
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
string packetData = await _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));
response = new Packet()
{
packet = packetData
};
return response;
}
这在我在 VS2015 中调试时效果很好,但是当我将我的 WebApi 部署到 Azure 时,我收到了这个错误:
OperationContext.Current的值不是这个OperationContextScope安装的OperationContext值。
我正在寻找 (a) 解决此错误的解决方案,或 (b) 将 Authorization 标头设置为包含不记名令牌的替代方法。
【问题讨论】:
-
使用 OperationContext 的出色教科书示例,您可以使用 WCF 传递的上下文是使用它的最佳全方位理由之一。您可以使用始终可用的令牌和标识符来做一些非常酷的事情。
标签: wcf azure asp.net-web-api soap-client