wcf - переносит контекст в заголовки - PullRequest
1 голос
/ 18 января 2010

Я использую wcf 4 и пытаюсь прозрачно передавать контекстную информацию между клиентом и сервером.

Я смотрел на поведение и смог обойтись.Моя проблема заключается в том, как передать контекст, полученный во входящих заголовках, в другие сервисы, которые могут быть вызваны сервисом.

В поведении службы я перехватываю сообщение и читаю заголовки, но не знаю, куда поместить эти данные, чтобы они были доступны для следующего вызова службы, который может сделать текущая служба.

То, что я ищу, выглядит примерно так:

public void DoWork()
{
     var someId = MyContext.SomeId;
     //do something with it here and call another service
     using(var proxy = GetProxy<IAnotherService>())
          proxy.CallSomeOtherMethodThatShouldGetAccessTo_ MyContextualObject();

}

Если я храню заголовки в локальном хранилище потока, у меня могут возникнуть проблемы из-за гибкости потока (не уверен, что это происходит за пределами ASP.NET, то есть хостов пользовательских служб),Как бы вы реализовали MyContext в коде выше.

Я выбрал MyContext вместо прямого доступа к заголовкам, потому что инициатор вызова службы может не быть службой, и в этом случае MyContext поддерживается HttpContext, например, для хранения.

1 Ответ

0 голосов
/ 19 января 2010

В служебном поведении я перехватываю сообщение и прочитайте заголовки но не знаю, где поместить эти данные быть доступным для следующего сервиса позвонить.

Как правило, между вызовами нет состояния. Каждый вызов является полностью автономным, каждый вызов получает новый экземпляр класса обслуживания, созданный с нуля. Это рекомендуемая лучшая практика.

Если вам нужно передать эту информацию (язык, настройки и т. Д.) На второй, третий, четвертый вызов, сделайте это, передав ее в заголовки. не начинайте ставить состояние на стороне сервера WCF! Службы WCF всегда должны быть полностью автономными и не сохранять любое состояние, если это возможно.

ОБНОВЛЕНИЕ : хорошо, после ваших комментариев: вас может заинтересовать новый базовый класс RoutingService, который будет поставляться с WCF 4. Он позволяет такие сценарии, как вы описали, - получать сообщение извне и переадресация на другой сервис где-то в фоновом режиме. Google для "WCF4 RoutingService" - вы должны найти ряд статей. Я не мог найти ничего особенного в заголовках, но думаю, что они будут прозрачно транспортироваться.

Существует также серия статей из двух частей Создание маршрутизатора WCF, часть 1 часть 2, здесь ) в журнале MSDN, которая выполняет более или менее то же самое в WCF 3.5 - снова Не уверен насчет заголовков, но, возможно, это может дать вам представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...