Wcf OperationContext.Current的值不是此OperationContextScope安装的OperationContext值
在我的WebApi控制器中,我试图调用Wcf OperationContext.Current的值不是此OperationContextScope安装的OperationContext值,wcf,azure,asp.net-web-api,soap-client,Wcf,Azure,Asp.net Web Api,Soap Client,在我的WebApi控制器中,我试图调用.asmxSOAP服务 我使用VS2015生成SoapClient代理作为服务引用 我的主要问题是,我需要将授权头设置为包含承载令牌 我想我已经找到了一个解决方案,使用@SimonRC的答案。我的代码如下所示: using (OperationContextScope scope = new OperationContextScope(_client.InnerChannel)) { var httpRequestProperty = new Htt
.asmx
SOAP服务
我使用VS2015生成SoapClient代理作为服务引用
我的主要问题是,我需要将授权头设置为包含承载令牌
我想我已经找到了一个解决方案,使用@SimonRC的答案。我的代码如下所示:
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)将授权标头设置为包含承载令牌的替代方法。将对SOAP服务的调用更改为同步而不是异步解决了此问题 基本上,我改变了这一点:
string packetData = await _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));
为此:
string packetData = _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));
当然,链的上游也会进行相应的更改,以删除所有的异步任务。成功了
我的想法是从@chrismaric的评论中删除async,“我知道这个问题很老了,但在WCF服务中几乎没有理由使用async。”很高兴有这样的评论 使用OperationContext的绝佳教科书示例,您可以使用WCF传递的上下文是使用它的最佳全面理由之一。您可以使用始终可用的令牌和标识符做一些非常酷的事情。