Как добавить расширенную информацию в вызов .Net Remoting без добавления новых параметров в вызовах? - PullRequest
1 голос
/ 16 февраля 2011

Я работаю с большим существующим сервисом .Net Remoting.Эту услугу необходимо изменить таким образом, чтобы все вызовы этой службы нуждались в дополнительной информации, чтобы служба могла правильно обрабатывать вызовы.

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

1 Ответ

2 голосов
/ 28 февраля 2011

Это может быть выполнено с использованием следующих интерфейсов: IClientChannelSink, IClientChannelSinkProvider, IServerChannelSink и IServerChannelSinkProvider

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

Обзор высокого уровня можно найти по адресу http://www.diranieh.com/NETRemoting/ExtendingNET.htm

Раздел конфигурации клиента для включения приемника клиента:

<system.runtime.remoting>
  <application>
      <channels>
            <channel ref="tcp" port="0" encryption="EncryptAndSign">
              <clientProviders>
                  <provider 
                   type="Namespace.ClientSinkProvider, dll"/>
              </clientProviders>
          </channel>
      </channels>
  </application>
</system.runtime.remoting>

Раздел конфигурации сервера для включения приемника сервера:

<system.runtime.remoting>
      <application>
          <channels>
               <channel ref="tcp" port="0" encryption="EncryptAndSign">
                         <serverProviders>
                              <provider 
                               type="Namespace.ServerSinkProvider, dll" />
                              </serverProviders>
              </channel>
          </channels>
      </application>
</system.runtime.remoting>
...