首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OperationContext.Current的值不是此OperationContextScope安装的OperationContext值。

OperationContext.Current的值不是此OperationContextScope安装的OperationContext值。
EN

Stack Overflow用户
提问于 2017-05-26 01:36:29
回答 1查看 873关注 0票数 1

在我的WebApi控制器中,我试图调用一个.asmx SOAP服务。

我使用VS2015作为服务引用生成SoapClient代理。

我的主要问题是,我需要将授权头设置为包含比勒令牌。

我认为我有一个解决方案,使用@SimonRC的答案here。我的代码如下所示:

代码语言:javascript
复制
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令牌的替代方法。

EN

回答 1

Stack Overflow用户

发布于 2017-05-26 03:03:15

将对SOAP服务的调用更改为同步而不是异步解决了问题。

基本上,我改变了这个:

代码语言:javascript
复制
string packetData = await _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));

对此:

代码语言:javascript
复制
string packetData = _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));

当然,在链上进行相应的更改,以便在任何地方删除异步任务。那就成功了。

我的想法是从@ChrisMarisic的评论here中删除异步,“我知道这个问题很老,但几乎没有理由在WCF服务中使用异步。”很高兴听到这样的评论!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44192260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档