Обеспечение доступности данных домена для поведения WCF
В моем приложении есть значение ("BusinessUnit"), которое я хочу добавить в каждый запрос к веб-сервису. Одним из способов сделать это было бы написать поведение WCF, которое вставило бы значение для меня.
Однако, одна часть, которая мне не ясна, состоит в том, как я могу получить это значение из своего приложения и в поведение.
Чтобы проиллюстрировать мой вопрос, вот как я могу это реализовать.
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
string businessUnit = //How do I set this to a value known by the client?
MessageHeader<string> header =
new MessageHeader<string>(businessUnit);
request.Headers.Add(
header.GetUntypedHeader("Business Unit", "http://mywebsite.com"));
}
Есть идеи?
1 ответ
Если это значение одинаково для всех вызовов, то вы можете рассмотреть возможность использования для него статической переменной. Если он меняется в зависимости от вызова, вы можете использовать контекст операции, чтобы добавить его (и даже пропустить поведение), как показано ниже
ServiceClient client = new ServiceClient(...);
using (new OperationContextScope(client.InnerChannel))
{
MessageHeader<string> header = new MessageHeader<string>(businessUnit);
OperationContext.Current.OutgoingMessageHeaders.Add(header.GetUntypedHeader("Business Unit", "http://mywebsite.com"));
client.MakeServiceCall();
}
Если что-то меняется в зависимости от группы вызовов, вы можете рассмотреть возможность передачи его поведению при создании клиента, а затем поведение может передать его инспектору, который он создает:
ServiceClient client = new ServiceClient(...);
client.Endpoint.Behaviors.Add(new MyBehavior(businessUnit));
client.MakeServiceCall1();
client.MakeServiceCall2();
client.MakeServiceCall3();