Пользовательский MessageEncoder WCF требует пользовательского поведения - PullRequest
0 голосов
/ 21 июля 2009

Я написал собственный MessageEncoder для конвейера WCF, который затем применяется с помощью BindingElementExtensionElement в моем app.config.

На сервере, когда приходит сообщение, мой кодировщик сообщений должен извлечь некоторую информацию из потока и удерживать ее в течение контекста операции, чтобы она могла быть возвращена в качестве заголовка в ответе. Манипуляции с заголовками кричат ​​о функциональности поведения, так что ... Я хотел бы знать, как я могу заставить свой пользовательский кодер также применять пользовательское поведение к конвейеру (где я позабочусь о хранении этой специальной «информации» в контексте операции) - кодер по сути бесполезен без поведение, поэтому я не хочу полагаться на пользователя, который помнит о добавлении конфигурации поведения при добавлении конфигурации кодера - это должно происходить автоматически под прикрытием.

Кроме того, где хороший ресурс для чтения о жизненном цикле этих элементов конвейера?

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 июля 2009

У вас есть два основных варианта:

1) либо вы выставляете свое поведение через атрибут, чтобы его можно было добавить в файл конфигурации сервера - что-то вроде этого:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <YourCustomMessageEncoderBehavior />
        </behavior>
      </serviceBehaviors>
    </behaviors>

2) или вы можете создать свой собственный ServiceHost, который обязательно добавит это поведение в список режимов отправки, если его там еще нет.

class YourCustomServiceHost : ServiceHost
{
    public YourCustomServiceHost(Type serviceType, params Uri[] baseAddresses)
           : base(serviceType, baseAddresses) { }

    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();     

        YourCustomMessageEncodingBehavior behavior = 
           this.Description.Behaviors.Find<YourCustomMessageEncodingBehavior>();

        if (behavior == null)
        {
           behavior = new YourCustomMessageEncodingBehavior();
           this.Description.Behaviors.Add(behavior);
        }
        else
        {
           return;
        }
    }
}

Марк

0 голосов
/ 21 июля 2009

Я написал пользовательские заголовки и инспекторы сообщений для WCF и нашел эту статью и некоторые ссылки в ней полезными на моем пути:

Обработка пользовательских заголовков SOAP с помощью поведения WCF

НТН

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