Одна служба WCF для нескольких клиентских подключений - PullRequest
4 голосов
/ 20 октября 2008

Я разработал службу WCB VB.NET, которая получает и отправляет данные обратно. Когда первый клиент соединяется, он начинает вывод данных, который продолжается также, если клиент закрыт. Если подключается новый клиент, то создается новый объект, и вывод данных начинается с начала и продолжается параллельно со старым экземпляром. Есть ли способ прочитать один и тот же объект службы с нескольких клиентов?

Услуга размещена самостоятельно.

ОБНОВЛЕНИЕ: Я решил проблему, добавив следующий бит кода в класс обслуживания:

<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Multiple, 
    InstanceContextMode:=InstanceContextMode.Single)>
    ...

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

Ответы [ 2 ]

2 голосов
/ 20 октября 2008

Я говорю о вариантах здесь:

http://www.iserviceoriented.com/blog/post/Configuring+Performance+Options+-+WCF+Gotcha+3.aspx

Во-первых, у вас есть InstanceContextMode, который может быть Single, PerCall или PerSession. Это контролирует, как создаются новые экземпляры вашего класса обслуживания.

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

2 голосов
/ 20 октября 2008

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

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

ОБНОВЛЕНИЕ : Как указывал @jezell, существует некоторый контроль над экземпляром службы в IIS через InstanceContextMode. Однако это все еще не контролирует процессы IIS.

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