'无法建立连接,因为目标计算机主动拒绝了它'

时间:2016-11-16 14:14:01

标签: c# .net web-services

我正在使用.Net Framework 3.5开发'智能设备项目'。我正在尝试连接到远程服务器上的一些Java SOAP服务 为此,我在项目中添加了“Web引用”。

当我尝试调用我的Web服务时,我得到一个WebException“无法连接到远程服务器”,内部异常为“无法建立连接,因为目标计算机主动拒绝它”。

我在Web和StackOverflow上搜索了很多,发现了很多ASP配置和'Unavaliable port'的答案,但是由于我有另一个应用程序成功使用完全相同的服务,我无法理解为什么新的不是通过(它有时通过我的测试,所以我认为我的客户端实现并不那么糟糕)

我尝试通过使用一些TcpClient来查看端口上是否存在某些连接问题:

            System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
            try
            {
                client.Connect("myServerName", 8087);
                MessageBox.Show("Success");
            } catch (Exception ex)
            {
                MessageBox.Show("Failure");
            }
            finally
            {
                client.Close();
            }

此连接成功。

以下是我如何调用WebService的示例:

WSServiceExtended srv = new WSServiceExtended();
srv.Proxy = new System.Net.WebProxy();
ServeurWSI wsi = new ServeurWSI();
srv.Url = "http://myServerName:8087/myServerApp/services/myService";
wsr = srv.login(wsi);

该服务被称为“扩展”,因为我使用Compact Framework,因此我为了添加Cookie管理而覆盖了自动生成的服务。在此主题中的示例之后: https://social.msdn.microsoft.com/Forums/en-US/34d88228-0b68-4fda-a8cd-58efe6b47958/no-cookies-sessionstate-in-compact-framework?forum=vssmartdevicesvbcs

修改
我用Web引用做了一些新的测试,并让它工作 当我添加Web引用时,我必须将一些Url放到Web服务中。当我用实际主机名而不是'localhost'设置它时一切都很好。 但是,由于我在呼叫之前手动将其设置为真实地址,因此无关紧要

srv.Url = "http://myServerName:8087/myServerApp/services/myService";

EDIT2:
我可能忘记了一些关于我的环境的细节 Web服务在某些Tomcat服务器上的计算机上公开 我正在处理的应用程序也是在这台计算机上开发的(这就是我可以通过在地址中加入'localhost'来添加Web引用的原因)
然后将应用程序部署在远程设备(Windows CE)上,该设备将通过WIFI调用Web服务(那时,localhost将不起作用)

我尝试成功从其他计算机调用Web服务。

我开始认为调用的Url和设置的Url之间可能存在一些差异,否则,我将如何在行为中产生差异,例如第一次编辑中描述的行为?

EDIT3:
嗯..看起来不是网络问题而是.Net紧凑框架(用法?)问题...
简单地忽略Web Service实现的Url属性,并使用Reference.cs中的那个。

如果有人知道如何解决这个问题,我会非常感激。

3 个答案:

答案 0 :(得分:2)

该错误意味着您到达了服务器并且服务器说“没办法”。所以你要么是错误的服务器,要么是错误的端口。

我发现telnet客户端对于测试这样的东西非常有用。从命令行,您可以执行以下操作:

telnet [servername] [port]

类似于:

telnet myServerName 8087

如果进入空白屏幕,则表示连接成功。如果它没有连接,它会告诉你。

Windows 7+中默认不再安装telnet客户端,因此您必须安装它。请参阅此处获取说明:https://technet.microsoft.com/en-ca/library/cc771275

如果连接打开,您可以粘贴实际的HTTP请求以查看发生的情况。一个简单的GET看起来像这样:

GET /myServerApp/services/myService HTTP/1.1
Host: myServerName:8087

答案 1 :(得分:2)

此错误的一个原因可能是服务仅绑定到某个IP地址。很可能该服务仅侦听分配给主机名的IP,而不是localhost IP(127.0.0.1)上的IP。

例如:
如果主机myServerName具有公共IP 192.168.0.1,则您的服务可以选择侦听分配给主机的所有 IP(有时指定0.0.0.0),或者它可以专门监听仅限192.168.0.1。在这种情况下,您将无法通过127.0.0.1进行连接,因为该服务根本无法侦听该IP。

你可以"使用"此功能的此反转使得服务只能由本地客户端访问,而不是在公共IP地址上,通过仅侦听127.0.0.1,而不是在公共IP上侦听。这有时在Linux上使用,例如,只能在主机上访问MySQL。

答案 2 :(得分:0)

我开始忘记这篇文章,但我终于发现问题搞砸了,而且它与编程没有任何关系。

当设备通过“Windows移动设备中心”连接到计算机时,我正在拨打电话。允许从Windows访问设备。 连接时,将忽略提供的主机,并且指定端口上的所有呼叫都由连接的计算机处理。 断开设备可以正常通信......