2012-06-19 4 views
11

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

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

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

Благодаря

ответ

12

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

+0

Я уже пользуюсь WebServiceHost, но, похоже, это не работает для меня. Доступ к IP-адресу моей системы: порт не вызывает служебную страницу. –

+9

Может быть брандмауэром или у пользователя нет достаточных привилегий для размещения на используемом вами порту. http://msdn.microsoft.com/en-us/library/ms733768.aspx – driis

+0

Можете ли вы объяснить сценарий, который мне потребуется? Если я использую REST, как я могу позволить удаленному устройству, например моему iPhone, звонить в службу, через HTML-файл JS на основе –

3

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

+1

См. Комментарий, который я опубликовал в driis answer –

+1

ServiceHost, а не WebServiceHost, если только ваша служба WCF не использует методы на основе REST (WebGet и т. Д.) – Rich

+1

Да, это использует базовые методы REST. Любые другие мысли? –

1

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

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

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

Пиво!

2

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

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

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

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

0

Это может быть предложение, если оно не подходит, пожалуйста, проигнорируйте его: используйте самообслуживание в качестве упомянутого @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

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