Если я использую код, подобный этому [чуть ниже], чтобы добавить заголовки сообщений к своему OperationContext, будут ли все будущие исходящие сообщения содержать эти данные в любом новом 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(...);
}
Так как я не очень понимаю, что там происходит, я не хочу грузить культ и просто поменять его и позволить ему летать, если он работает, я хотел бы услышать ваши мысли о том, нормально это или нет .