WCF с PerCall, SessionMode.NotAllowed, обратный вызов? - PullRequest
1 голос
/ 03 апреля 2012

Привет,

У меня есть служба, которая использует следующие сегодня

  • NETTCPBinding (WAS)
  • Размещено в IIS7
  • Служба PerSession
  • SessionMode.Required
  • Обратные вызовы
  • Singelton на службе, которая содержит все клиентские контексты

Скажите, что яТеперь нужно изменить это значение на PerCall instanciated и SessionMode.NotAllowed . Возможно ли это, не теряя при этом ни одной из моих ключевых функций?

Я видел, что TCP являетсяпротокол, связанный с сеансом, и это означает, что мне придется использовать HTTP Binding witch не так быстро, как TCP (кодировщик XML 1.0 вместо двоичного кодировщика).Но я все еще не уверен, будет ли это поддерживать, например, обратные вызовы?

1 Ответ

1 голос
/ 03 апреля 2012

PerCall и SessionMode.NotAllowed «менее» специфичны / ограничены, чем ваши текущие настройки.Вы легко сможете перейти к этим настройкам, если поймете фундаментальное значение: больше нет состояния между вызовами в экземплярах ваших служб.

При этом я не уверен, что понимаю, что вы подразумеваете подMsgstr "Синглтон на службе, которая содержит все контексты клиента".Можете ли вы уточнить?Я думаю, что вы имеете в виду состояние удержания в пределах одноэлементного (статического поля?) В реализации сервиса.Доступ к этому из экземпляров PerCall будет нормальным, просто помните, что вы должны обеспечить блокировку этого состояния.Вот, например, как вы могли бы поддерживать список обратных вызовов.

Кроме того, ваше представление о том, что TCP является только сеансом, неверно.Помните, HTTP - это протокол, построенный поверх TCP.Да, сокеты TCP остаются подключенными в течение некоторого времени (остаются активными), поэтому их можно использовать повторно, но сообщения, которые вы отправляете через них, могут быть совершенно не связаны друг с другом.Так что, если вы будете использовать NetTcpBinding, все будет в порядке.Точно так же вы можете технически выполнять сеансы через транспорт HTTP.Кроме того, если вы переключились на транспорт на основе HTTP, у вас нет для использования кодировки текста.Вы можете отправлять двоичный контент через HTTP-транспорт, для этого просто необходимо настроить пользовательскую привязку, которая будет выглядеть примерно так:

<bindings>
    <customBinding>
        <binding name="MyBinaryOverHttpBinding">
            <binaryMessageEncoding />
            <httpTransport />
        </binding>
    </customBinding>
</bindings>
...