WCF,用我的IP替换'localhost'还是应该使用NetTcpBinding?

Rog*_*ger 2 c# wcf

在继续学习WCF的同时,我从http://msdn.microsoft.com/en-us/library/ms734712.aspx完成了入门教程并创建了我的第一个服务器/客户端应用程序.:)

但现在我想知道,如果我希望这个应用程序在不同的机器上运行,我该怎么办?

从服务器应用程序:

Uri baseAddress = new Uri("http://localhost:8000/Server");
ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
Run Code Online (Sandbox Code Playgroud)

如果我想从外面获得这项服务,我该如何更换"localhost"?我尝试用我的IP替换它,但那不起作用.

有任何想法吗?

我还听说HttpBinding有点过时,主要用于wcf应用程序需要与非wcf应用程序通信时.而在wcf-to-wcf通信中应该使用NetTcpBinding,是这样的吗?

谢谢!:)

Che*_*hev 8

如果您希望外部世界可以访问IP,请将其替换为面向公众的IP.

WhatIsMyIp.com将为您提供公共IP.

如果您只想在网络上使用它,则将其替换为家庭网络中计算机的IP或主机名.通常以192.168.xx开头

请记住在主机上的防火墙中打开端口.此外,如果您的互联网上的计算机试图连接到您的公共IP,您将必须学习如何在路由器中进行端口转发,以将请求发送到本地网络上的相应计算机.

编辑

为了更好地帮助您可视化网络结构的工作原理,您需要了解您的公共IP(来自whatismyip.com的IP)是您的ISP分配给您的路由器的IP(假设您在路由器后面).然后,您的路由器会为您的网络上的计算机分配他们自己的本地 IP,通常从192.168.xx开始.如果您的客户端应用程序尝试连接到您的公共IP,您的路由器需要知道如何处理该请求.它必须有一条规则,说该端口上的请求需要转发到网络上的特定计算机(运行主机应用程序的计算机).

如果您不在路由器后面,那么您需要担心的是防火墙.

编辑2

您不熟悉网络,因此您必须了解的是,您无法绕过在路由器后面的服务器上侦听的应用程序的端口转发.研究下图:

http://clear-cloud.com/sitebuildercontent/sitebuilderpictures/router-diagram.gif

这是家庭网络的通用结构.现在用IP地址研究这个图.

http://www.codetunnel.com/networkdiagram.jpg

这些是由IP构成的,但你明白了.您的Internet服务提供商为您的路由器分配了IP.然后,您的路由器会为您的网络上的计算机分配自己的IP.当请求进入您的公共IP时,它会命中您的路由器.您的路由器从您的客户端应用程序接收请求,并且不执行任何操作,因为它没有任何等待请求的软件.这就是为什么他们称路由器为硬件防火墙,来自互联网的请求无法使其成为您网络上可能存在漏洞的PC.

让请求找到通往正确PC的唯一方法是告诉路由器如何做到这一点.大多数路由器都有一个带端口转发部分的配置接口,供您执行此操作.一个例子是这个linksys路由器配置页面:

Ext Port是路由器应该侦听来自的请求的端口.您可以指定一系列端口,或通常只指定一个端口.

协议是要侦听的请求类型.如果您不知道UDP和TCP之间的区别,那么您需要研究它,因为它超出了本答案的范围.我敢肯定,如果您正在阅读一本好的WCF教科书,那么您很快就会了解这些协议.现在请记住,大多数开始的连接都是TCP.如果你转发它们也不会受到伤害.

IP地址是路由器应将请求转发到的计算机的本地IP.请注意,在此linksys屏幕截图中,它已经填充了前3个段.这是因为它已经知道网络本地IP地址的第一部分,因为它首先分配了它们.

然后,选中该框以启用转发规则.您的路由器现在将您指定的端口或端口范围内的外部连接发送到网络上的相应PC.不同品牌的路由器具有不同的配置页面,但它们应该非常相似且直接.

让拥有客户端和服务器应用程序且想要设置它的用户必须转发端口是一个巨大的痛苦.这就是为什么大多数应用程序都有一个中央服务器,只将客户端应用程序传递给用户.

注意:请记住,只有正在侦听请求的主机应用程序需要将端口转发到路由器(如果它位于路由器后面).客户端应用程序不会知道差异,您只需要公开面向IP.

  1. 第一种选择是在某处设置中央托管应用程序.所以基本上,你在服务器上设置了一个托管应用程序,所有网络配置(端口转发)都按照你需要的方式设置.然后,所有客户端应用程序都连接到该服务器,服务器在它们之间来回传递信息.

http://homepages.uel.ac.uk/u0219091/jw-1019-jxta1-client%20server%20model.gif