0

我在Windows 窗体应用程序中有 WCF 自托管服务。我将使用它,以便手持移动设备可以与应用程序进行基本交互。

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

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

这些端点都在托管服务的本地机器上工作。

但是,在远程机器上运行 WCFTestClient 时,我得到的结果好坏参半。

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

无法连接到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 失败了

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

我的两个问题是:

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

2 回答 2

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);

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

于 2011-02-21T14:04:10.823 回答
3

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

于 2011-02-21T11:55:14.640 回答