Доступ к локальному WCF с другого устройства?

Я успешно создал службу WCF, которая работает так, как я хочу. Единственная проблема в том, что я не могу получить доступ к веб-сервису ни с чего, кроме реального компьютера, на котором работает сервис WCF.

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

Кто-нибудь знает простой способ сделать это без установки клиентом чего-то большего, чем.NET Framework?

Спасибо

5 ответов

Решение

Используйте собственный хостинг для размещения в вашем собственном приложении / сервисе. Если у вас уже есть служба WCF, создать службу Windows и разместить ее там будет несложно (см. Ссылку).

WCF не нужен веб-сервер для размещения службы. Однако что-то должно быть запущено, либо консольное / хост-приложение, либо служба Windows. Затем при запуске он может открыть службу, создав экземпляр класса ServiceHost. См. Пример MSDN по http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx

Для запуска службы WCF вам необходим хост-процесс. Обойти это невозможно.

Если хост-процесс (в зависимости от того, какие требования, модель развертывания, сетевые ограничения и т. Д. Применимы к вашему случаю) может совпадать с вашим настольным приложением, то вставьте службу в ваше настольное приложение. Этот метод называется хостингом WCF "in-proc". В основном это "Self Hosting" сервис в клиентском приложении. Если вы примете это решение, используйте привязку IPC (net.pipe), так как она более оптимальна, и удалите все потенциальные факторы сети / брандмауэра.

Если служба должна быть запущена на другом компьютере или в другом процессе, вам необходимо использовать или внедрить хост-приложение. IIS, WAS, AppFabric и WCFServiceHost (не хост хоста производственного уровня) - вот некоторые примеры готовых хостов, которые вы можете использовать. Если вы не можете или не хотите их использовать, вам нужно будет реализовать собственное хост-приложение и включить в него службу "Self Host" службы WCF. Ваше приложение может быть любым: консоль, рабочий стол, служба Windows и т. Д. Если вы не хотите, чтобы пользователи беспокоились о том, как и когда запускать хост, убедитесь, что он работает постоянно. Рекомендуется автоматически запустить службу Windows.

Если служба должна работать на компьютере, отличном от клиента, убедитесь, что все сетевые устройства и программное обеспечение (межсетевые экраны, маршрутизаторы, шлюзы и т. Д.) Между сервером и клиентом правильно настроены для работы привязки. Помните о протоколе (http, tcp и т. Д.) И порту (80, 443, 808 и т. Д.), На котором работает ваша привязка.

Вы можете попробовать шаг хостинга из следующей статьи.

http://www.codeproject.com/Articles/34668/GeoPlaces-Hybrid-smart-client-involving-RESTful-WC

Чтобы протестировать свой сервис, сделайте запрос на него и проверьте ответ. Иногда вы не сможете загрузить WSDL, если вы не предоставили метаданные своих служб.

Бирс!

Вот предложение, если оно не подходит, пожалуйста, не обращайте на него внимания: используйте самодостаточный сервис, как упомянуто @driis. Это ваш лучший вариант для вашего сценария. О размещении HTML-страницы внутри вашей службы WCF... да, это возможно, но это не простое решение. Чтобы подвести итог в одном предложении, вы должны создать свой пользовательский форматер сообщений и обойти стандартное сообщение, предоставляемое WCF. Вы должны создать HtmlBehavior, который должен наследоваться от WebHttpBehavior, HtmlBehaviorExtension, который должен наследоваться от BehaviorExtensionElement, и, наконец, HtmlFormater, который будет реализовывать IDispatchMessageFormatter. По следующей ссылке вы найдете отличную статью о пользовательских форматерах: http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx

Другие вопросы по тегам