2009-08-23 1 views
2

Что я использую для двусторонней связи через Интернет без необходимости открывать порты на стороне клиента?Самый простой для двухсторонней связи через Интернет с использованием C#

Пользователи не согласятся открывать порты и выполнять переадресацию портов на стороне клиента, хотя все возможно на стороне сервера.

Но, мне нужно выполнить два способа связи ..

Как я могу идти о достижении этой цели?

Не имеет значения, является ли его WCF или удаленный доступ или веб-сервисы ... Мне просто нужен быстрый и быстрый способ получить концепцию для разработки и распространения приложения.

Конечно, это будет через Интернет.

Пожалуйста, помогите .. Спасибо

Edit: Обратите внимание, что мне нужно подключить несколько клиентов и поддерживать сеанс для каждого клиента.

+0

Ну, я имею в виду, вы можете просто использовать веб-сайт. Люди могут иметь учетные записи, а затем, вы знаете, сообщения друг другу :) –

+0

Нет, у меня уже есть клиент Windows, который общается с веб-сайтом ... , но теперь мне нужен сайт, чтобы инициировать некоторую работу над клиентом ... .Это проект распределенной архитектуры для обмена процессами на разных машинах. – Josh

ответ

3

WCF поддерживает двусторонние HTTP-привязки.

До тех пор, пока инициирующий клиент может получить доступ к службе, для вызова клиента может быть определен контракт обратного вызова. Он просто поддерживает HTTP-соединение после того, как клиент инициировал его.

+0

, но я думаю, что порт должен быть открыт на стороне клиента, и требуется пересылка порта ... правильно? – Josh

+0

Если клиентский компьютер может получить доступ к веб-сайту, он также может получать ответ от веб-службы. Вопрос в том, сколько времени требуется, прежде чем ответ поступит на клиента :) Именно это и использует WCF: клиент терпеливо ждет ответа HTTP от службы, и он держит соединение открытым неопределенно.Поскольку соединение открыто, служба может отправлять ответы клиенту каждый раз, когда это кажется. Так же работает интернет-автобус (Azure). –

+0

Есть ли какой-нибудь пример? Я использовал WCF, как веб-сервис, добавив ссылку ... , но как я могу заставить WCF вызывать функцию на клиенте, когда это требуется? – Josh

1

Подключить через TCP (сырые сокеты или более высокую реализацию) к центральному серверу.
На вашем сервере должно быть приложение, которое прослушивает конкретный, хорошо известный TCP-порт.
Каждый клиент подключается к вашему серверу, используя определенный порт и «входит в систему».
Напишите протокол приложения выше TCP (аутентификация, управление сеансом и т. Д.), И там у вас есть , поскольку TCP-соединение, однажды установленное, работает для обоих направлений.

+0

HTTP (с использованием TCP) работает одинаково. Нет оснований для такого подхода на низком уровне. –

+0

Я думаю, что у HTTP, как ожидается, будет свой тайм-аут, и я не уверен, что этот предел в порядке OP. –

+1

Кроме того, HTTP-модель является одним ответом на запрос. Я не могу сказать, хочет ли OP «выполнить двухстороннюю связь» только одним ответом на один запрос. –

2

Это зависит от того, что вы хотите сделать. Дуплексный WCF может работать, но через NAT и Proxies он становится несколько «iffy», потому что он зависит от того, как клиент открывает конечную точку WCF и поддерживает соединение.

Я написал a beginners guide to WCF callbacks некоторое время назад - это достаточно просто сделать, но вам нужно будет протестировать его много, от различных клиентских настроек.

+0

Работает ли ваш гид по NAT? NAT - моя проблема ... Я не могу ожидать, что обычные пользователи ПК настроят переадресацию портов. – Josh

+0

, пожалуйста, помогите ... любой способ выйти из NAT? Teamviewer.com и logmein.com сделали это ... почему мы не можем после стольких технологий внутри .Net? Там нет из коробки? – Josh

+0

Брандмауэры да, NAT нет. Вы могли бы посмотреть на Teredo и туннелирование, но это может быть излишним. TeamViewer и Loginme поддерживают открытое TCP-соединение, которое туннелирует через NAT - это не WCF, или веб-службы или удаленное соединение (которое никогда не играет хорошо с брандмауэрами). – blowdart

 Смежные вопросы

  • Нет связанных вопросов^_^