【问题标题】:Accessing localhost WCF from other device?从其他设备访问 localhost WCF?
【发布时间】:2012-06-21 23:25:39
【问题描述】:

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

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

有没有人知道一种无需客户安装 .NET Framework 以外的任何东西的简单方法?

谢谢

【问题讨论】:

    标签: c# wcf remote-access


    【解决方案1】:

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

    【讨论】:

    • 我已经在使用 WebServiceHost,但它似乎对我不起作用。访问我系统的 IP:Port 不会调出服务页面
    • 可能是防火墙或用户没有足够的权限在您使用的端口上托管。 msdn.microsoft.com/en-us/library/ms733768.aspx
    • 你能解释一下我需要采取的方案吗?如果我使用 REST,我将如何允许像我的 iPhone 这样的远程设备通过基于 JS 的 HTML 文件调用服务
    • 或者有没有办法在网络服务中托管 HTML 页面(网站)?
    • 它可能会阻止连接到非 https 服务。
    【解决方案2】:

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

    【讨论】:

    • 查看我在 driis answer 中发表的评论
    • ServiceHost,而不是 WebServiceHost,除非您的 WCF 服务使用基于 REST 的方法(WebGet 等)
    • 是的,它使用的是 REST 基础方法。还有其他想法吗?
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      啤酒!

      【讨论】:

        【解决方案5】:

        这里是可能的建议,如果不合适请忽略它:使用@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

        【讨论】:

          猜你喜欢
          • 2014-11-01
          • 2015-04-23
          • 2015-11-22
          • 1970-01-01
          • 2013-05-22
          • 1970-01-01
          • 2015-06-27
          • 2016-09-11
          • 2013-12-26
          相关资源
          最近更新 更多