簡體   English   中英

“無法建立連接,因為目標計算機主動拒絕了它”

[英]'No connection could be made because the target machine actively refused it'

我正在使用.Net Framework 3.5進行“智能設備項目”。 我正在嘗試連接到遠程服務器上的某些Java SOAP服務。
為此,我在項目中添加了“ Web參考”。

當我嘗試調用Web服務時,我收到一個WebException“無法連接到遠程服務器”,內部異常是“由於目標計算機主動拒絕它而無法建立連接”。

我在Web和StackOverflow上進行了大量搜索,發現了很多ASP配置和“不可用端口”答案,但是由於我有另一個應用程序成功使用了完全相同的服務,因此我無法理解為什么新的應用程序沒有得到使用通過(有時通過我的測試來完成,所以我想我的客戶端實現還不錯)

我試圖通過使用一些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引用時,必須在Web服務中添加一些網址。 當我使用實際的主機名而不是'localhost'進行設置時,一切都很好。 但是,由於我在通話之前將其手動設置為真實地址,所以沒關系

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

EDIT2:
我可能忘記了一些有關我的環境的細節。
Web服務在某些Tomcat服務器上的計算機上公開。
我正在使用的應用程序也在此計算機上開發(這就是為什么我可以通過在地址中添加“ localhost”來添加Web引用的原因)
然后,將應用程序部署在遠程設備(Windows CE)上,該設備將通過WIFI調用Web服務(在那里,本地主機將無法使用)

我嘗試從其他計算機成功調用Web服務。

我開始認為被調用的Url和設置的Url之間可能存在一些差異,否則,我在行為上會有什么區別,例如第一次編輯中描述的那樣?

EDIT3:
嗯..好像不是網絡問題,而是.Net緊湊框架(用法?)問題...
只需忽略Web服務實現的Url屬性,就可以使用Reference.cs中的Url屬性。


如果有人對如何解決這個問題有所了解,我將非常感激。

該錯誤意味着您已到達服務器,並且服務器說“沒辦法”。 因此,您遇到的是錯誤的服務器或錯誤的端口。

我發現telnet客戶端對於測試像這樣的東西很有用。 在命令行中,您可以執行以下操作:

telnet [servername] [port]

所以像這樣:

telnet myServerName 8087

如果進入黑屏,則說明連接成功。 如果沒有連接,它將告訴您。

telnet客戶端默認不再安裝在Windows 7+中,因此您必須安裝它。 有關說明,請參見此處: https : //technet.microsoft.com/zh-cn/library/cc771275

如果連接確實打開,則可以粘貼實際的HTTP請求以查看會發生什么。 一個簡單的GET看起來像這樣:

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

出現此錯誤的一個原因可能是該服務僅綁定到某個IP地址。 很有可能該服務僅偵聽分配給主機名的IP,而不偵聽localhost IP(127.0.0.1)。

例如:
如果主機myServerName具有公用IP 192.168.0.1,則您的服務可以選擇偵聽分配給主機的所有 IP(有時指定0.0.0.0),也可以僅偵聽192.168.0.1。 在這種情況下,您將無法通過127.0.0.1進行連接,因為該服務根本無法監聽該IP。

通過僅偵聽127.0.0.1,而不能偵聽公用IP,可以“使用”此功能的相反功能,以使服務只能由本地客戶端訪問,而不能在公用IP地址上訪問。 例如,有時在Linux上使用它來使MySQL僅可在主機本身上訪問。

我開始忘記了這篇文章,但最終我發現了使事情變得混亂的問題,它與編程無關。

當設備通過“ Windows Mobile設備中心”連接到計算機時,我正在打電話,允許從Windows訪問設備。 連接后,提供的主機將被忽略,指定端口上的所有呼叫均由連接的計算機處理。 斷開設備連接可以正常通信...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM