Что делает “OperationContext. Текущий. GetCallbackChannel” на самом деле делают?

Что делает OperationContext. Текущий. GetCallbackChannel на самом деле делают? Как это идентифицирует каждый клиент?

Я сталкиваюсь с проблемой в своем сервисе WCF. Если больше чем два пользователя подключаются к сервису все "интересные Изменения", я отправляю от сервиса до клиентов, идут к второму пользователю, к которому присоединяются.

Поскольку исключая, Если A, B, C, D присоединяется к сервису, если я отправляю изменения в C и D посредством обратного вызова, он идет в B.

Какие-либо идеи?

Подробнее:

Клиент: веб-приложение ASP.NET

Привязка: netTCPBinding

Update1

Оки, я нашел причину проблемы. Я разместил клиент asp.net в IIS. Например, URL клиента является http://url1. Если я открываю несколько экземпляров страницы в другой машине и присоединяюсь к сервису, канал обратного вызова всегда указывает на первую инстанцию страницы (я открываю сайт от различных машин). Но если я размещаю клиент asp.net под различными сайтами в IIS, каналы обратного вызова уникальны. Какие-либо мысли об этом?

7
задан NLV 7 July 2010 в 05:41
поделиться

2 ответа

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

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

Если ваша служба использует режим экземпляра Singleton, объект реализации может хранить список экземпляров обратного вызова в качестве члена данных. Если ваш сервис использует режим экземпляра Client или SingleCall, то вы можете иметь глобальный объект, содержащий список экземпляров обратного вызова.

6
ответ дан 7 December 2019 в 07:40
поделиться

Вы должны настроить ваша служба для создания отдельного потока для каждого сеанса. Взгляните на http://msdn.microsoft.com/en-us/library/cc681240.aspx

1
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: