无法使用WCF通过网络进行访问

时间:2011-02-21 11:48:57

标签: c# .net wcf http net.tcp

我在Windows Forms应用程序中有一个WCF自托管服务。我将使用它,因此手持移动设备可以在基本级别与应用程序进行交互。

我启用了basicHttp(http://localhost:8080/tagservice/basic),NetTCP(net.tcp://localhost:8888/tagservice)和basicHttpMex作为端点。

出于测试目的,我在网络上设置了一个虚拟机(并在物理机上重复这些虚拟机)。

这些端点都可以在托管服务的本地计算机上运行。

但是,当在远程计算机上运行WCFTestClient时,我得到了混合结果。

  1. 使用上述端点,我可以连接到服务并查看服务合同,证明mex(IMetadataExhange)有效。但我不能使用http或net.tcp。我收到错误消息
  2.   

    无法连接到http://localhost:8080/tagservice/basic。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8080。

         

    无法连接到net.tcp:// localhost:8888 / tagservice。连接尝试持续时间跨度为00:00:01.0014400。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8888。

    1. 将localhost更改为主机上app.config中的真实IP地址时,在本例中为192.168.0.61。基本HTTP工作。但是net.icp失败并带有

      “服务器已拒绝客户端凭据。”

    2. 我的两个问题是:

      1. 为什么net.tcp失败了?据我所知,我没有选择输入凭据。
      2. 鉴于IP地址可以更改,如何让app.config使用DHCP服务器分配的IP地址?一旦这个软件从开发环境转移到生产环境,IP地址就不会被硬编码,因为它会发生变化。

2 个答案:

答案 0 :(得分:4)

在运行时构建和配置客户端绑定,因此您可以根据计算机信息以编程方式设置URL

这样的事情应该有效

string hostName = System.Net.Dns.GetHostName();
int port = 8080;
Uri serviceUri = new Uri(string.Format("http://{0}:{1}", hostName, port.ToString()));


EndpointAddress endpoint = new EndpointAddress(serviceUri);

然后,您只需将该端点附加到您的客户端,它应该全部连接起来。

答案 1 :(得分:3)

您可以将localhost替换为您的主机名(如果IP地址是动态的)或IP地址(如果是静态的)并重新编译您的客户端。