gpt4 book ai didi

c# - OperationContext.Current 中的 WCF MessageHeaders

转载 作者:太空狗 更新时间:2023-10-30 01:27:34 24 4
gpt4 key购买 nike

如果我使用像下面这样的代码将消息 header 添加到我的 OperationContext 中,所有 future 的传出消息是否都包含从我的应用程序的相同“运行”定义的任何新 ClientProxy 上的数据?

目标是向每个 OpeartionContract 传递一个或两个参数,而不会弄乱 OperationContract 的签名,因为传递的参数对于我的客户端应用程序的给定运行的所有请求都是一致的。

public void DoSomeStuff()
{
var proxy = new MyServiceClient();
Guid myToken = Guid.NewGuid();
MessageHeader<Guid> mhg = new MessageHeader<Guid>(myToken);
MessageHeader untyped = mhg.GetUntypedHeader("token", "ns");
OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
proxy.DoOperation(...);
}

public void DoSomeOTHERStuff()
{
var proxy = new MyServiceClient();
Guid myToken = Guid.NewGuid();
MessageHeader<Guid> mhg = new MessageHeader<Guid>(myToken);
MessageHeader untyped = mhg.GetUntypedHeader("token", "ns");
OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
proxy.DoOtherOperation(...);
}

换句话说,像这样重构上面的代码是否安全?

bool isSetup = false;
public void SetupMessageHeader()
{
if(isSetup) { return; }
Guid myToken = Guid.NewGuid();
MessageHeader<Guid> mhg = new MessageHeader<Guid>(myToken);
MessageHeader untyped = mhg.GetUntypedHeader("token", "ns");
OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
isSetup = true;
}

public void DoSomeStuff()
{
var proxy = new MyServiceClient();
SetupMessageHeader();
proxy.DoOperation(...);
}

public void DoSomeOTHERStuff()
{
var proxy = new MyServiceClient();
SetupMessageHeader();
proxy.DoOtherOperation(...);
}

因为我真的不明白那里发生了什么,所以我不想去崇拜它,只是改变它,如果它有效就让它飞起来,我想听听你对它是否可行的看法.

最佳答案

我认为您的重构代码没有带来任何附加值。您是否考虑过 OperationContext 可以为空?

我认为这将是一种更安全的方法:

 using(OperationContextScope contextScope =
new OperationContextScope(proxy.InnerChannel))
{

.....
OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
proxy.DoOperation(...);
}

OperationContextScope 的构造函数总是会导致替换当前线程的 Operation 上下文; OperationContextScope 的 Dispose 方法被调用,它恢复旧的上下文,防止同一线程上的其他对象出现问题。

关于c# - OperationContext.Current 中的 WCF MessageHeaders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601851/

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