C# 从其他设备访问本地主机WCF?

C# 从其他设备访问本地主机WCF?,c#,wcf,remote-access,C#,Wcf,Remote Access,我已经成功地创建了一个WCF服务,它可以按照我所希望的方式工作。唯一的问题是,除了WCF服务正在运行的实际机器之外,我无法从任何地方访问web服务 我知道Cassini web服务只是本地的,我希望能够在客户需要我的桌面应用程序中的WCF服务时,在我的客户系统上运行WCF服务 有没有人知道一种简单的方法可以做到这一点,而无需客户安装.NET Framework以外的任何东西 感谢您在自己的应用程序/服务中使用主机。如果您已经拥有WCF服务,那么创建一个windows服务并将其托管在那里应该是一件

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

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

有没有人知道一种简单的方法可以做到这一点,而无需客户安装.NET Framework以外的任何东西


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

WCF不需要web服务器来托管服务。但是,需要运行一些东西,控制台/主机应用程序或Windows服务。然后在启动时,它可以通过创建ServiceHost类的实例来公开服务。请参见MSDN示例,网址为

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

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


啤酒

要运行WCF服务,您需要一个主机进程。这是没有办法的

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

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


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

这里有一个可能的建议,如果不合适,请忽略它:使用@dri提到的自托管服务。这是您的场景的最佳选择。关于在WCF服务中托管HTML页面的问题…是的,这是可能的,但这不是一个简单的解决方案。要总结为一句话,您必须创建自定义消息格式化程序,并绕过WCF提供的默认消息格式化程序。您将创建一个必须从WebHttpBehavior继承的HtmlBehavior,一个必须从BehaviorExtensionElement继承的HtmlBehaviorExtension,最后创建一个将实现IDispatchMessageFormatter的HtmlFormatter。在下面的链接中,您将看到一篇关于自定义格式化程序的精彩文章:

我已经在使用WebServiceHost,但它似乎对我不起作用。访问我的系统的IP:端口不会打开服务页面可能是防火墙或用户没有足够的权限在您使用的端口上托管。你能解释一下我需要采取的方案吗?如果我使用REST,我将如何允许像我的iPhone这样的远程设备通过基于JS的HTML文件调用该服务,或者是否有任何方法在web服务内托管HTML页面(网站)?这可能会阻止连接到非https服务。请参阅我在driis answerServiceHost而不是WebServiceHost中发布的评论,除非您的WCF服务使用基于REST的方法(WebGet等),否则是的,它使用的是基于REST的方法。还有其他想法吗?