Чат ASP.NET с WCF

Я хочу реализовать интерфейс чата для страницы ASP.NET. Я изучаю WCF, и мне кажется, что он подходит для приложения чата. Прежде чем я слишком увлекся WCF, я хочу убедиться, что это правильный выбор для разработки приложения чата в ASP.NET. Кто-нибудь может оставить отзыв?

Я нашел несколько примеров приложений, которые в основном используют Silverlight с WCF для приложений чата. Существуют ли какие-либо ограничения, если я решу не использовать Silverlight?

Кроме того, были бы очень полезны любые альтернативы WCF, которые я мог бы полностью контролировать. Я знаю, что могу использовать опрос AJAX, отзывы о преимуществах / недостатках приветствуются. Спасибо.


person Sean    schedule 12.12.2009    source источник


Ответы (5)


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

Единственная проблема заключается в том, как ваше приложение реагирует на конечного пользователя. Здесь отзывчивый означает, что система позволяет пользователю чувствовать присутствие других пользователей и общаться в чате в реальном времени. Иногда это называют действительно реальным временем. (Как и в случае с gmail и facebook, веб-чат позволяет пользователю видеть сообщение пользователя, говорящее «пользователь набирает текст или бездействует»)

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

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

В формате ASP.Net:

  • Это полностью контролируется AJAX.
  • Вы должны смоделировать дуплексную связь с помощью AJAX. По умолчанию HTTP не поддерживает дуплекс. Это в одну сторону. Это только ответы на запрос клиента. Он не может напрямую вызывать клиентский метод.
  • Существуют существующие методы, позволяющие добиться этого. Один из подходов называется COMET или ReverseAJAX.
  • Это не что иное, как долгоживущие вызовы AJAX, и он будет отвечать клиенту, если на стороне сервера происходит ожидаемое событие, в противном случае он остается спокойным. Эта статья википедии Comet (программирование) более подробно описывает этот подход.

Методом SilverLight:

  • Silverlight обеспечивает гораздо лучший пользовательский интерфейс по сравнению с обычными HTML-страницами.
  • Используя SL, вы можете использовать службы WCF Duplex для реализации Техника проталкивания сервера. Согласно MSDN, в нем говорится

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

Надеюсь это поможет

person RameshVel    schedule 22.12.2009
comment
Привет, Рамеш, спасибо за подробности. Знаете ли вы, можно ли использовать wsDualHttpBinding для приложения ASP.NET или только SL поддерживает дуплексные службы? - person Sean; 23.12.2009
comment
Дуплекс потенциально можно использовать только на стороне сервера ASP.NET, но не напрямую от клиента. Удачи и удачи. - person smaclell; 23.12.2009
comment
@Sean, как сказал smallclell, мы не можем вызывать WCF с клиентской стороны AJAX (не можем вызывать из js). поэтому лучший подход - COMET, если вы продолжите работу с asp.net. или WCF Duplex лучше, если вы хотите продолжить с SL .. ознакомьтесь с той же темой здесь, в SO stackoverflow.com/questions/1066336/ - person RameshVel; 23.12.2009
comment
Служба службы WCF может использоваться на стороне клиента с помощью JQuery - johnnliu.spaces .live.com / blog / cns! 90A843AB92E99F! 395.entry - person NLV; 09.07.2010

Клиент Silverlight:

Silverlight имеет несколько преимуществ, включая гибкость пользовательского интерфейса, больший контроль WCF и возможность использования одного и того же языка программирования / инструментов на клиенте и сервере. Если вы выбрали Silverlight, у вас будет больше гибкости в отношении того, как данные передаются на сервер и с сервера, например, какой протокол использовать (TCP, HTML) и как передавать данные. Параметры пользовательского интерфейса в Silverlight позволяют создавать очень богатый и интересный опыт с полной поддержкой дизайнера и анимацией.

Клиент ASP.NET:

Простой клиент HTML может быть быстрее создать, поскольку вам не нужно будет учиться использовать Silverlight для создания эквивалентной функциональности. Даже имея только HTML, css и javascript, вы все равно можете иметь очень приятный пользовательский интерфейс, просто посмотрите на gtalk в качестве примера. Использование современных библиотек javascript, таких как jQuery, упрощает быстрое создание сложного приложения, которое по-прежнему легко понять и поддерживать.

Если вы хотите поиграть, повеселиться и узнать что-то новое, возможно, рассмотрите возможность использования клиента ASP.NET с базовым интерфейсом WCF RESTful. У вас по-прежнему будет много контроля и гибкости как на клиенте, так и на сервере в отношении того, какие сообщения отправлять, как клиент делает запросы, кэширование на сервере и т.д. http://www.west-wind.com/WebLog/posts/310747.aspx "rel =" nofollow noreferrer "> это сообщение Рика Страла.

Я написал приложение аналогичного типа для отправки уведомлений в приложении ASP.NET и колебался между отправкой push и опросом от клиента (см. этот вопрос о переполнении стека). Меня вдохновил этот пример чата, в котором очень простой интерфейс и push-уведомление для клиента.

person smaclell    schedule 21.12.2009

Silverlight - естественный выбор для приложения чата WCF, поскольку вы можете создать более богатый пользовательский интерфейс и, что наиболее важно, напрямую взаимодействовать со службами WCF. Если вы выберете Ajax, тогда все клиентское программирование должно выполняться на Javascript. Вы можете создать службу WCF с поддержкой Ajax, но на самом деле вам нужно поговорить с ним через прокси. Это похоже на службу, подобную JSON Rest, и не предлагает весь потенциал технологии WCF (например, связывание обратных вызовов).

Альтернативой WCF является реализация простых HTTP-сервисов (например, с использованием ASP.NET MVC) и подключение к ним с помощью библиотеки javascript, такой как jQuery. Конечно, опрос необходим, но это то, что делает большинство веб-сайтов в подобных случаях. Преимущество решения заключается в том, что оно является кроссплатформенным, но, вероятно, для его разработки потребуется больше времени, и он не может иметь такой богатый интерфейс, как Silverlight none.

person kgiannakakis    schedule 16.12.2009
comment
Спасибо, есть ли преимущества в использовании Silverlight по сравнению с ASP.NET в отношении функциональности WCF или это в первую очередь связано с пользовательским интерфейсом? Кроме того, работают ли обратные вызовы через привязку HTTP (если пользователь A пишет сообщение чата, будет запущен обратный вызов для обновления окна чата других пользователей), будет ли это работать должным образом или все еще необходимо опрашивать сервер каждые x секунд, чтобы узнать, есть новые сообщения? - person Sean; 16.12.2009
comment
Дело не только в пользовательском интерфейсе. Насколько мне известно, вы не можете делать то, что описываете, с помощью службы WCF с поддержкой Ajax. Будет необходим опрос. - person kgiannakakis; 16.12.2009

Я не знаю о Silverlight, но для обычного AJAX я обнаружил, что справляться с вещами самостоятельно с помощью контроллера ASP.NET MVC намного проще.

person orip    schedule 17.12.2009

Ознакомьтесь с приведенной ниже ссылкой - это должна быть хорошая статья, чтобы начать создание приложения для чата с использованием WCF и WPF. Очень просто и легко освоить базовые вещи.

http://www.codeproject.com/KB/WCF/WCFWPFChat.aspx

Вы можете найти приложение Attached Demo вместе с исходным кодом в статье выше.

Изменить:

Для чат-приложения TCP Binding является лучшим вариантом, чем HTTP Binding.

пожалуйста, обратитесь к этому -> http://www.codeproject.com/KB/WCF/HttpBinding.aspx

person solairaja    schedule 21.12.2009
comment
Спасибо, солайраджа. Я прочитал эту статью и, несомненно, буду ссылаться на нее снова и снова. Мой главный вопрос заключается в том, как это будет работать с одной из привязок http, автор использует привязку tcp. Вы видите какие-либо проблемы с http? - person Sean; 21.12.2009
comment
Спасибо solairaja за ссылку, это действительно отличный пример. - person smaclell; 22.12.2009
comment
проверьте секцию EDIT для привязки HTTP. - person solairaja; 22.12.2009
comment
Этот пример никогда не подойдет для ASP.net. Если у вас есть Asp.net на стороне клиента, это может ввести в заблуждение. Дуплексные вызовы не работают с клиентами ASP.NET. - person NLV; 09.07.2010