WCF回调(客户端不在DNS上)没有端点监听

时间:2014-04-02 12:33:03

标签: wcf dns callback

我正在实施应用内聊天,所以我找到了非常有用的文章 由Ger Hayden(双面WCF初学者指南)。 下面的文章,我的聊天开始很快(同一台PC上的服务器和客户端) 一切顺利,直到我在测试机器上部署聊天服务器。 在服务器端启用WCF system.diagnostics时,我发现:

Remote name could not be resolved

问题是我的PC(客户端)又名a2200492.m022不在DNS中,因此服务器无法解析计算机名称 - > IP。 我一直在寻找配置WCF使用IP而不是计算机名称的解决方案,但我没有找到这样的配置参数。 (如果有,请告诉我) 接下来我发现有类似问题的人,想法将PC添加到DNS,或添加到服务器主机文件。但我想要一般解决方案。 因此,有效的解决方案(或更好的解决方法)是(从代码隐藏当前客户端IP): 客户代码:

 //In method for connecting...

System.ServiceModel.Channels.Binding b = new WSDualHttpBinding("WSDualHttpBinding_Server");
string clientID = Guid.NewGuid().ToString().Replace("-", ""); //if 2 app on same IP
/////////////////////////////////////////
//here is line that solved my problem, let server make callback to my ip
(b as WSDualHttpBinding).ClientBaseAddress = new Uri(@"http://" + MyIp() + "/" + clientID);**
/////////////////////////////////////////
(b as WSDualHttpBinding).ReliableSession = new ReliableSession(){Ordered=true};
(b as WSDualHttpBinding).Security = new WSDualHttpSecurity() { Mode = WSDualHttpSecurityMode.None };
(b as WSDualHttpBinding).HostNameComparisonMode = HostNameComparisonMode.WeakWildcard;

//ServerIP 
EndpointAddress serverIp = new EndpointAddress(System.Configuration.ConfigurationManager.AppSettings["ChatServer"].ToString());

//Instantiate service reference
chatServer = new ChatServerRef.ServerClient(new InstanceContext(this), b, serverIp);
//Next step is call method JoinTheConversation on chatServer

1 个答案:

答案 0 :(得分:0)

通过在运行时更改ClientBaseAddress来解决