gpt4 book ai didi

c# - WCF,用我的IP替换“localhost”还是应该使用NetTcpBinding?

转载 作者:行者123 更新时间:2023-11-30 19:48:22 28 4
gpt4 key购买 nike

在继续学习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);


如果希望外部可以使用此服务,应使用什么替换“ localhost”?
我尝试用我的IP替换它,但是那没用。

有任何想法吗?

我还听说HttpBinding有点过时,并且主要在wcf应用程序需要与非wcf应用程序进行通信时使用。在WCF与WCF之间的通信中,应该使用NetTcpBinding,是这样吗?

谢谢! :)

最佳答案

如果希望外界可以访问它,则用面向公众的IP替换它。

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

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

记住在主机上open ports in your firewall。同样,如果您正在Internet上有一台计算机尝试连接到公用IP,则必须学习如何在路由器中执行port forwarding以便将请求发送到本地网络上的相应计算机。

编辑

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

如果您不在路由器后面,则只需担心防火墙。

编辑2

您是刚接触网络的人,因此您必须了解的是,对于在路由器后面的服务器上侦听的应用程序,无法绕过端口转发。研究下图:


(来源:clear-cloud.com

这是家庭网络的通用结构。现在使用IP地址研究此图。

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

这些都是IP,但您知道了。您的路由器由Internet服务提供商分配了IP。然后,路由器会为网络上的计算机分配自己的IP。当请求进入您的公共IP时,它就会到达您的路由器。您的路由器从客户端应用程序收到请求,并且不执行任何操作,因为它没有等待该请求的任何软件。这就是为什么他们称路由器为硬件防火墙,来自Internet的请求无法将其发送到网络上潜在易受攻击的PC的原因。

使请求找到正确的PC的唯一方法是告诉路由器该如何做。大多数路由器都有一个带有端口转发部分的配置界面,以供您执行此操作。一个示例就是此linksys路由器配置页面:


(来源:rhinosoft.com

外部端口是路由器应侦听传入请求的端口。您可以指定一个端口范围,或者通常仅指定一个端口。

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

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

然后只需选中启用复选框即可启用转发规则。您的路由器现在将在您指定的端口或端口范围上将来自外界的连接发送到网络上的相应PC。不同品牌的路由器具有不同的配置页面,但它们应该非常相似且直截了当。

使同时拥有客户端和服务器应用程序并想要进行设置的用户必须转发端口,这是一个巨大的难题。这就是为什么大多数应用程序只有一个中央服务器,而仅将客户端应用程序传递给用户的原因。

注意:请记住,只有正在侦听请求的主机应用程序才需要将端口转发给它,如果它在路由器后面。客户端应用程序将不知道它们之间的区别,您只需放入一个面向公众的IP。


第一种选择是在某个地方设置中央托管应用程序。因此,基本上,您可以在服务器上设置一个托管应用程序,并根据需要设置所有网络配置(端口转发)。然后,所有客户端应用程序都连接到该服务器,服务器在它们之间来回中继信息。



(来源:uel.ac.uk

关于c# - WCF,用我的IP替换“localhost”还是应该使用NetTcpBinding?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5584960/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com