从其他设备访问localhost WCF?

时间:2012-06-19 20:47:31

标签: c# wcf remote-access

我已经成功创建了一个可以按照我想要的方式运行的WCF服务。唯一的问题是除了运行WCF服务的实际机器之外,我无法访问Web服务。

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

有没有人知道在没有客户安装除.NET Framework以外的任何内容的情况下轻松实现此目的的方法?

由于

5 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:3)

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

上的MSDN示例

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:1)

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

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

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

啤酒!

答案 4 :(得分:0)

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