WCF 10049: 在其上下文中,该请求的地址无效,急急急!

kinglshadow 2010-03-23 02:49:57
自己开发的一款WCF应用程序,但是在服务端出现了以下异常:

无法启动服务。System.ServiceModel.CommunicationException: 侦听 IP 终结点=123.145.113.135:9005 时出现 TCP 错误(10049: 在其上下文中,该请求的地址无效。)。

这个异常只有在运行服务的机器通过路由器连接外网才会出现,如果直接将该机器不通过路由器直接连接外网,就不会报这样的异常,而且能正常使用。

补充两点, 防火墙已关闭, 防火墙的例外规则已添加, 我用的是9005端口, 所以添加了2个规则, 端口9005和我的服务端.


...全文
2059 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
遥远的青苹果 2012-04-09
  • 打赏
  • 举报
回复
服务器端本身有占用你那个端口的,或者是服务器本身同时运行了服务端和客户端,一个端口。
再者就是路由器问题了。
kinglshadow 2010-03-26
  • 打赏
  • 举报
回复
还是端口问题,路由器端口没有设置正确,重新设置下就好了。
fskang 2010-03-24
  • 打赏
  • 举报
回复
用这个m_serviceHostA.AddServiceEndpoint(typeof(CSCommunication.ICSCommunicationService), binding, manageUri);的重载方法,把ListenUri加上试试。
qldsrx 2010-03-24
  • 打赏
  • 举报
回复
你还是检查下端口映射的问题吧。
有一个简单的检测方法:你可以现在需要映射的服务端电脑上安装IIS等web服务,然后设定本地web访问的端口为你的9005(默认是80),此时你的程序不要开启,因为端口给IIS占用了。然后你只要外网测试下那个端口的http服务是否可访问即可知道结果了。
  • 打赏
  • 举报
回复
关注,我也想知道这个问题
kinglshadow 2010-03-24
  • 打赏
  • 举报
回复
开了的呀,路由器里面添加了端口的。
qldsrx 2010-03-24
  • 打赏
  • 举报
回复
你除了防火墙添加例外规则外,端口映射添加了没有,这个可不是程序的事,外网访问那个9005端口必须要能够映射到内网开着服务的那个电脑才行。
kinglshadow 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qldsrx 的回复:]
你只要把

C# code
string manageUri = "net.tcp://" + manageIp + ":9005/CSCommunicationService";

改为

C# code
string manageUri = "net.tcp://localhost:9005/CSCommunicationService";

就好了

你给的信息已经充……
[/Quote]
不行,改了后,客户端访问的时候会出现EndpointNotFoundException,因为客户端使用服务端的真实外网IP访问的。
kinglshadow 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qldsrx 的回复:]
你只要把

C# code
string manageUri = "net.tcp://" + manageIp + ":9005/CSCommunicationService";

改为

C# code
string manageUri = "net.tcp://localhost:9005/CSCommunicationService";

就好了

你给的信息已经充……
[/Quote]
好,我马上去试试
qldsrx 2010-03-24
  • 打赏
  • 举报
回复
你只要把
string manageUri = "net.tcp://" + manageIp + ":9005/CSCommunicationService";

改为
string manageUri = "net.tcp://localhost:9005/CSCommunicationService";

就好了

你给的信息已经充分表名,监听的IP地址在本地是找不到的,直接连接外网的话,那个IP是可以在本地找到,但是通过路由器连接,本地就没那个IP地址了,所以你需要通过localhost来代替本地任意IP地址。
guyehanxinlei 2010-03-24
  • 打赏
  • 举报
回复
Friendly Up!
kinglshadow 2010-03-24
  • 打赏
  • 举报
回复
晕了,怎么都没人。
kinglshadow 2010-03-23
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。没人能指点下吗。。。
kinglshadow 2010-03-23
  • 打赏
  • 举报
回复
这段代码是开启服务的。

ServiceHost m_serviceHostA = null;
m_serviceHostA = new ServiceHost(typeof(CSCommunication.CSCommunicationService));
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
EndpointIdentity identity = EndpointIdentity.CreateDnsIdentity("localhost");

string manageIp = NetConnection.getIP();
string manageUri = "net.tcp://" + manageIp + ":9005/CSCommunicationService";
m_serviceHostA.AddServiceEndpoint(typeof(CSCommunication.ICSCommunicationService), binding, manageUri);
m_serviceHostA.Open();

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧