gpt4 book ai didi

wcf - OperationContext.Current 的值不是此OperationContextScope 安装的OperationContext 值

转载 作者:行者123 更新时间:2023-12-03 01:47:46 29 4
gpt4 key购买 nike

在我的 WebApi Controller 中,我尝试调用 .asmx SOAP 服务。

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

我的主要问题是我需要设置授权 header 以包含承载 token 。

我认为我有一个解决方案,使用@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) 设置授权 header 以包含承载 token 的替代方法。

最佳答案

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

基本上,我改变了这一点:

string packetData = await _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));

对此:

string packetData = _client.GetPacketAsync(packetNumber, packetDate.ToString("ddMMMyy"));

当然,还有相应的更改链以删除各处的异步任务。就这样做到了。

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

关于wcf - OperationContext.Current 的值不是此OperationContextScope 安装的OperationContext 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192260/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com