使WCF服务可通过Internet访问

时间:2010-02-25 22:28:35

标签: wcf service hosting

我已经制作了WCF服务。我希望它的客户端能够从任何地方访问它。我怎样才能做到这一点? 详细说明:

  • 我希望它能够在Windows中托管 过程,而不是网站。
  • 我正在使用TCP绑定。
  • 我几乎不知道有关网络托管等的任何事情。
  • 最好不要使用IIS ...

我在网上找到了很多推荐,但仍然不了解所有内容。请告诉我如何详细说明......

据我了解,有必要为端点创建一个全局。我已经在我的路由器中将端口转发配置到8000端口,但是......还有什么进一步的?我应该输入什么地址作为端点地址?它现在是localhost:8000。

6 个答案:

答案 0 :(得分:2)

您需要一个公共IP地址或域名,如上所述。如果没有按照上面的建议进行设置,请确定您是否已经拥有它。

对于您的WCF主机和客户端,您将需要如下所示的端点:

  • 主持人:net.tcp:// localhost:portnum / servicename
  • 客户:net.tcp:// publicipORdomainname:portnum / servicename

您需要确保路由器将端口路由到主机PC。从这个问题听起来你已经正确地完成了它。因为主机是本地的,所以您不必将端点更改为使用公共IP或域名。客户端需要解析对驻留在远程地址上的主机的调用,因此需要可寻址的公共IP。

答案 1 :(得分:1)

您不需要IIS,您可以自托管,也可以通过互联网访问。

基本上,当您自托管WCF应用程序时,它是一个服务器(就像Apache或IIS之类的Web服务器)。

这是一个很好的网站,讨论如何将自己的服务器暴露在互联网上。

http://www.diywebserver.com/

请记住,您可以跳过与设置Apache有关的任何部分,因为您已经有了服务器(您的WCF应用程序)。

答案 2 :(得分:0)

正如我在related SO link中回答的那样,我的建议基于this codeproject.com example。它运作良好。

答案 3 :(得分:0)

您需要拥有公共IP和域名。我建议为您的服务租用虚拟服务器并将其托管在Windows服务中。

答案 4 :(得分:0)

您不应该使用 localhost :8000进行托管,因为这只能在本地计算机上访问。端口转发不起作用。

而是使用机器网络名称或LAN IP。

答案 5 :(得分:0)

如果您的服务在IIS上运行没有任何问题,那么您需要执行以下步骤才能通过互联网

访问此服务

<强>假设:

我的解决方案名称为 SearchServiceLibrary

接口名称为 ISearch

类名是搜索,此类实现ISearch接口

<强>步骤1: 如果您的PC位于NAT后面,则需要转发 PORT ,告诉您的路由器应该在哪里发送收到的Web服务请求。

步骤2:在WSDL文件中指定服务器的域名/ IP地址

在app.config文件中更新或编辑以下标记

 <serviceMetadata httpGetEnabled="True" httpGetUrl="http://DomainName_OR_IPAddress:PORT/SearchServiceLibrary.Search.svc/basic"/>

第3步: app.config 文件中设置肥皂位置

您需要在app.config文件中添加一个终点,您可以通过描述性地或使用选项编辑WCF配置

来执行此操作
<service name="SearchServiceLibrary.Search">
                <endpoint    address="http://DomainName_OR_IPAddress:PORT/SearchServiceLibrary.Search.svc/basic"   binding="basicHttpBinding"
          contract="SearchServiceLibrary.ISearch">
          <identity>
            <dns value="localhost" />
          </identity>
    </endpoint>

或使用选项编辑WCF配置

enter image description here 这对我来说非常完美。