我已经成功地创建了一个 WCF 服务,它可以按照我想要的方式工作。唯一的问题是,除了 WCF 服务正在运行的实际机器之外,我无法从任何东西访问 Web 服务。
我了解 Cassini Web 服务仅是本地的,我希望能够在我的客户系统上运行 WCF 服务,只要他们在我的桌面应用程序中需要该服务。
有没有人知道一种简单的方法来做到这一点,而不需要客户安装除 .NET Framework 之外的任何东西吗?
谢谢
我已经成功地创建了一个 WCF 服务,它可以按照我想要的方式工作。唯一的问题是,除了 WCF 服务正在运行的实际机器之外,我无法从任何东西访问 Web 服务。
我了解 Cassini Web 服务仅是本地的,我希望能够在我的客户系统上运行 WCF 服务,只要他们在我的桌面应用程序中需要该服务。
有没有人知道一种简单的方法来做到这一点,而不需要客户安装除 .NET Framework 之外的任何东西吗?
谢谢
使用自托管在您自己的应用程序/服务中托管。如果您已经拥有 WCF 服务,那么创建一个 Windows 服务并在其中托管它应该是一件简单的事情(请参阅链接)。
WCF 不需要 Web 服务器来托管服务。但是,需要运行一些东西,无论是控制台/主机应用程序还是 Windows 服务。然后在启动时,它可以通过创建 ServiceHost 类的实例来公开服务。请参阅位于http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx的 MSDN 示例
要运行 WCF 服务,您需要一个主机进程。没有办法解决这个问题。
如果主机进程可以(取决于适用于您的情况的任何要求、部署模型、网络限制等)与您的桌面应用程序相同,则将该服务嵌入到您的桌面应用程序中。这种技术称为“进程内”WCF 托管。它基本上是在客户端应用程序中“自托管”服务。如果您采用此解决方案,请使用 IPC (net.pipe) 绑定,因为它更优化,并消除所有潜在的网络/防火墙注意事项。
如果服务需要在不同的计算机或不同的进程中运行,那么您需要使用或实现主机应用程序。IIS、WAS、AppFabric 和 WCFServiceHost(不是生产级主机)是您可以使用的即用型主机的一些示例。如果您不能或不想使用它们,则需要实现自己的主机应用程序,并在其中“自托管”WCF 服务。您的应用程序可以是任何东西:控制台、桌面、Windows 服务等。如果您不想让用户担心如何以及何时启动主机,请确保它始终处于运行状态。建议使用自动启动的 Windows 服务。
如果服务需要在不同于客户端的计算机上运行,请确保服务器和客户端之间的所有网络设备和软件(防火墙、路由器、网关等)都已正确配置,以便您的绑定正常工作。请注意您的绑定所使用的协议(http、tcp 等)和端口(80、443、808 等)。
您可以尝试以下文章中的托管步骤。
http://www.codeproject.com/Articles/34668/GeoPlaces-Hybrid-smart-client-involving-RESTful-WC
为了测试您的服务,向它发出请求并检查响应。如果您没有公开您的服务元数据,有时您可能无法下载 WSDL。
啤酒!
这是可能的建议,如果不合适请忽略它:使用@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