none
WCF中localhost和127.0.0.1绑定的区别 RRS feed

  • 问题

  • NetTcpBinding binding = new NetTcpBinding();
                string address = "net.tcp://localhost:9999/HelloWorld";
                using (ServiceHost host = new ServiceHost(typeof(HelloWorldClass)))
                {
                    host.AddServiceEndpoint(typeof(IHelloWorld), binding, address);
                    Console.WriteLine("正在启动服务……");
                    host.Open();
                    Console.WriteLine("服务启动完成……");
                    Console.WriteLine(binding.PortSharingEnabled);
                    Console.WriteLine("按任意键结束");
                    Console.Read();
                }

    上面的代码完成NetTcpBinding,当地址使用localhost时,程序运行通过命令netstat -a查看,绑定的本地地址是0.0.0.0:9999,当使用127.0.0.1时,使用netstat -a查看绑定的本地地址是127.0.0.1:9999。在.net wcf绑定中,localhost和127.0.0.1到底有什么区别和联系?
    2017年6月2日 6:19

全部回复

  • Hi,

    感谢你在MSDN论坛发帖。

    这个两者区别,我觉得最大的不同点就是是否做 lookup这个动作。

    如果你使用127.0.0.1ip地址,软件就会自动的找到IP地址,并且使用它,并不做这个lookup的操作。 例如gethostbyname 这样的函数,就检测IP地址的格式是否正确,但是不会做lookup的操作。

    相反local 就会做lookup的操作针对localhost。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年6月2日 8:14
    版主
  • 0.0.0.0表示监听到所有本机地址的链接,这允许别的电脑连接你的服务。只监听127.0.0.1的话,只有本机的程序可以连接。


    Visual C++ MVP

    2017年6月6日 3:28
    版主
  • 没错,你说的我知道。0.0.0.0表示监听所有的IP地址,但我明明写的是localhost(对应到本地地址应该是127.0.0.1才对,而不应该是0.0.0.0)
    2017年6月7日 2:47
  • 0.0.0.0表示允许所有的IP地址,这个并不是一个真实的IP。netstat看到的是你客户端连接上的地址。



    Visual C++ MVP

    2017年6月9日 23:33
    版主