12

我已经成功地创建了一个 WCF 服务,它可以按照我想要的方式工作。唯一的问题是,除了 WCF 服务正在运行的实际机器之外,我无法从任何东西访问 Web 服务。

我了解 Cassini Web 服务仅是本地的,我希望能够在我的客户系统上运行 WCF 服务,只要他们在我的桌面应用程序中需要该服务。

有没有人知道一种简单的方法来做到这一点,而不需要客户安装除 .NET Framework 之外的任何东西吗?

谢谢

4

5 回答 5

12

使用自托管在您自己的应用程序/服务中托管。如果您已经拥有 WCF 服务,那么创建一个 Windows 服务并在其中托管它应该是一件简单的事情(请参阅链接)。

于 2012-06-19T20:50:27.407 回答
3

WCF 不需要 Web 服务器来托管服务。但是,需要运行一些东西,无论是控制台/主机应用程序还是 Windows 服务。然后在启动时,它可以通过创建 ServiceHost 类的实例来公开服务。请参阅位于http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx的 MSDN 示例

于 2012-06-19T20:50:33.417 回答
2

要运行 WCF 服务,您需要一个主机进程。没有办法解决这个问题。

如果主机进程可以(取决于适用于您的情况的任何要求、部署模型、网络限制等)与您的桌面应用程序相同,则将该服务嵌入到您的桌面应用程序中。这种技术称为“进程内”WCF 托管。它基本上是在客户端应用程序中“自托管”服务。如果您采用此解决方案,请使用 IPC (net.pipe) 绑定,因为它更优化,并消除所有潜在的网络/防火墙注意事项。

如果服务需要在不同的计算机或不同的进程中运行,那么您需要使用或实现主机应用程序。IIS、WAS、AppFabric 和 WCFServiceHost(不是生产级主机)是您可以使用的即用型主机的一些示例。如果您不能或不想使用它们,则需要实现自己的主机应用程序,并在其中“自托管”WCF 服务。您的应用程序可以是任何东西:控制台、桌面、Windows 服务等。如果您不想让用户担心如何以及何时启动主机,请确保它始终处于运行状态。建议使用自动启动的 Windows 服务。

如果服务需要在不同于客户端的计算机上运行,​​请确保服务器和客户端之间的所有网络设备和软件(防火墙、路由器、网关等)都已正确配置,以便您的绑定正常工作。请注意您的绑定所使用的协议(http、tcp 等)和端口(80、443、808 等)。

于 2012-06-23T02:13:51.510 回答
1

您可以尝试以下文章中的托管步骤。

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

为了测试您的服务,向它发出请求并检查响应。如果您没有公开您的服务元数据,有时您可能无法下载 WSDL。

啤酒!

于 2012-06-22T13:11:42.303 回答
0

这是可能的建议,如果不合适请忽略它:使用@driis 提到的自托管服务。这是您的方案的最佳选择。关于在您的 WCF 服务中托管 HTML 页面...是的,这是可能的,但这不是一个简单的解决方案。一句话总结,您必须创建自定义消息格式化程序并绕过 WCF 提供的默认消息格式化程序。您将创建一个必须从 WebHttpBehavior 继承的 HtmlBehavior、必须从 BehaviorExtensionElement 继承的 HtmlBehaviorExtension,最后是一个将实现 IDispatchMessageFormatter 的 HtmlFormater。在以下链接中,您将找到一篇关于自定义格式化程序的精彩文章:http: //blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx

于 2012-06-28T19:31:18.830 回答