Подключение ASP.Net к службе чата Wcf / Tcp - PullRequest
2 голосов
/ 03 февраля 2009

У меня есть служба чата WCF, которая принимает дуплексные TCP-соединения. Одно дуплексное TCP-соединение может использоваться для отправки и получения сообщений для более чем одного пользователя (поэтому у меня может быть несколько серверов чата, которые все соединяются друг с другом).

Теперь я хочу добавить веб-пользователей в список, чтобы они могли общаться с настольными пользователями. Это для типа поддержки в реальном времени. По сути, я пытаюсь найти лучший способ сделать внеполосную связь от ASP.Net с этим сервисом чата.

Я думал, что мог бы иметь статическое / глобальное дуплексное соединение с одним из серверов чата, и я мог бы использовать это для всех запросов к этому серверу ASP.Net. Будет ли это работать? Дуплексное соединение - это ВСЕ односторонние вызовы. Могу ли я использовать этот канал WCF без блокировки доступа к нему?

ОБНОВЛЕНИЕ: Спасибо за ваши предложения. Я должен был отметить: моя служба чата размещена самостоятельно, она не работает в IIS. Поэтому меня больше всего интересует, как заставить IIS держать соединение открытым до тех пор, пока приложение не будет выгружено. Соединение от веб-браузера до IIS будет Silverlight, Flash, AJAX, iframes, что угодно.

Ответы [ 3 ]

1 голос
/ 03 февраля 2009

Лучше всего создать двунаправленную очередь сообщений на уровне приложения, индексировать сообщения пользователя и идентификатор сеанса. Тогда вы могли бы получить сервис WCF уровня приложения (он же peer) и выдвинуть его на основе объектов ожидания. Доступ к очереди необходимо будет заблокировать, но это относительно низкая стоимость. Служба WCF сделает тяжелую работу. Однако в какой-то момент я ожидаю, что приложение будет испытывать узкие места, если для отправки сообщений используется только один прокси-сервер. Мне кажется, что наличие выделенного прокси-канала для каждой сессии может быть более эффективным, тем самым сохраняя состояние менее динамичным. Я также хотел бы разрешить недуплексные соединения, поскольку все сообщения являются односторонними операциями.

0 голосов
/ 03 февраля 2009

Одна из возможностей, которую следует рассмотреть, - это запустить приложение Silverlight 2 как часть страницы ASP.NET, к которой переходят веб-пользователи.

Это приложение Silverlight может использовать поддержку WCF Polling Duplex в сборках System.ServiceModel.PollingDuplex.dll ( для приложения Silverlight, для сервера WCF ), которые поставляются с Silverlight 2 SDK. 1005 *

У меня есть несколько постов в блоге и пример приложения , которые демонстрируют, как «выталкивать» обновления Stock из консольного приложения, которое самостоятельно размещает службу WCF с двумя конечными точками следующим образом:

using System;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace StockServer
{
    public class StockServiceHost : ServiceHost
    {
        public StockServiceHost(object singletonInstance, params Uri[] baseAddresses)
            : base(singletonInstance, baseAddresses)
        {
        }

        public StockServiceHost(Type serviceType, params Uri[] baseAddresses)
            : base(serviceType, baseAddresses)
        {
        }

        protected override void InitializeRuntime()
        {
            this.AddServiceEndpoint(
                typeof(IPolicyProvider),
                new WebHttpBinding(),
                new Uri("http://localhost:10201/")).Behaviors.Add(new WebHttpBehavior());

            this.AddServiceEndpoint(
                typeof(IStockService),
                new PollingDuplexHttpBinding(),
                new Uri("http://localhost:10201/SilverlightStockService"));

            this.AddServiceEndpoint(
                typeof(IStockService),
                new WSDualHttpBinding(WSDualHttpSecurityMode.None),
                new Uri("http://localhost:10201/WpfStockService"));

            base.InitializeRuntime();
        }
    }
}

Клиенты WPF подключаются к конечной точке WSDualHttpBinding, а клиенты Silverlight подключаются к конечной точке PollingDuplexHttpBinding той же службы WCF. В приложении также показано, как обрабатывать требования политики доступа клиента Silverlight.

Клиенты (Silverlight или WPF) могут добавлять заметки к акции в своем пользовательском интерфейсе, и эти заметки распространяются обратно на сервер для отправки всем остальным клиентам. Это демонстрирует связь в любом направлении и, мы надеемся, выполняет большую часть необходимой связи, необходимой для приложения чата.

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

0 голосов
/ 03 февраля 2009

Это может не отвечать на ваш вопрос, но вы можете сделать так, чтобы silverlight сделал это и использовал аналогичный код, который используется в вашей версии для ПК.

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