在我的WebApi控制器中,我试图调用一个.asmx SOAP服务。
我使用VS2015作为服务引用生成SoapClient代理。
我的主要问题是,我需要将授权头设置为包含比勒令牌。
我认为我有一个解决方案,使用@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)将授权头设置为包含Bearer令牌的替代方法。
发布于 2017-05-26 03:03:15
将对SOAP服务的调用更改为同步而不是异步解决了问题。
基本上,我改变了这个:
string packetData = await _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));对此:
string packetData = _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));当然,在链上进行相应的更改,以便在任何地方删除异步任务。那就成功了。
我的想法是从@ChrisMarisic的评论here中删除异步,“我知道这个问题很老,但几乎没有理由在WCF服务中使用异步。”很高兴听到这样的评论!
https://stackoverflow.com/questions/44192260
复制相似问题