317

WebService に対して HttpWebRequest を実行しているときに、次のエラーが発生することがあります。以下のコードもコピーしました。


System.Net.WebException: リモート サーバーに接続できません ---> System.Net.Sockets.SocketException: ターゲット マシンがアクティブに拒否したため、接続できませんでした 127.0.0.1:80
   System.Net.Sockets.Socket.DoConnect (エンドポイント endPointSnapshot、SocketAddress socketAddress) で
   System.Net.Sockets.Socket.InternalConnect (エンドポイント リモート EP) で
   System.Net.ServicePoint.ConnectSocketInternal で (ブール値の connectFailure、ソケット s4、ソケット s6、Socket& ソケット、IPAddress& アドレス、ConnectSocketState 状態、IAsyncResult asyncResult、Int32 タイムアウト、Exception& 例外)
   --- 内部例外スタック トレースの終了 ---
   System.Net.HttpWebRequest.GetRequestStream() で

ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.PreAuthenticate = true;
request.Credentials = networkCredential(sla);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = v_Timeout * 1000;

if (url.IndexOf("asmx") > 0 && parStartIndex > 0)
{
    AppHelper.Logger.Append("#############" + sla.ServiceName);

    using (StreamWriter reqWriter = new StreamWriter(request.GetRequestStream()))
    {                        
        while (true)
        {
            int index01 = parList.Length;
            int index02 = parList.IndexOf("=");

            if (parList.IndexOf("&") > 0)
                index01 = parList.IndexOf("&");

            string parName = parList.Substring(0, index02);
            string parValue = parList.Substring(index02 + 1, index01 - index02 - 1);

            reqWriter.Write("{0}={1}", HttpUtility.UrlEncode(parName), HttpUtility.UrlEncode(parValue));

             if (index01 == parList.Length)
                 break;

             reqWriter.Write("&");
             parList = parList.Substring(index01 + 1);
         }
     }
 }
 else
 {
     request.ContentLength = 0;
 }

 response = (HttpWebResponse)request.GetResponse();
4

32 に答える 32

236

これが常に発生する場合は、文字通り、マシンは存在するが、指定されたポートでリッスンするサービスがないか、ファイアウォールが停止していることを意味します。

これがときどき発生し (「ときどき」という言葉を使用しました)、再試行が成功する場合は、サーバーに完全な「バックログ」がある可能性があります。

acceptリッスン ソケットで ed を待機している場合、バックログに入れられます。このバックログは有限で非常に短いため、1、2、または 3 の値は珍しいことではありません。そのため、OS は「受け入れ」を消費するためのリクエストをキューに入れることができない場合があります。

バックログはlisten関数のパラメーターです。すべての言語とプラットフォームは、この点に関して基本的に同じ API を持っています。C#の API も同様です。サーバーを制御している場合、このパラメータは多くの場合設定可能であり、設定ファイルまたはレジストリから読み取られる可能性があります。サーバーの構成方法を調べてください。

サーバーを作成した場合、ソケットの受け入れで重い処理が発生する可能性があります。これを別のワーカースレッドに移動して、受け入れが常に接続を受信できるようにすることをお勧めします。クライアントをキューに入れ、それらを順次処理することを軽減する、さまざまなアーキテクチャの選択肢があります。

サーバーのバックログを増やすことができるかどうかに関係なく、この問題に対処するためにクライアント コードに再試行ロジックが必要です。バックログが長くても、サーバーはその時点でそのポートで他の多くのリクエストを受信して​​いる可能性があります。

まれに、マッピング用のポートが使い果たされた場合に、NAT ルーターがこのエラーを出す可能性があります。ルータは同じ宛先アドレス/ポートに 64K の同時接続を行い、枯渇する前に、この可能性は遠すぎるとして破棄できると思います。

于 2010-06-04T08:52:59.883 に答える
38

最も可能性の高い理由は、ファイアウォールです。

この記事には、役に立つかもしれない一連の理由が含まれています。

記事から、考えられる理由は次のとおりです。

  • FTP サーバーの設定
  • ソフトウェア/パーソナル ファイアウォールの設定
  • 複数のソフトウェア/パーソナル ファイアウォール
  • ウイルス対策ソフト
  • LSP レイヤー
  • ルーターのファームウェア
  • コンピュータの電源がオフになっています
  • コンピュータが接続されていません
  • フィドラー
于 2010-06-04T08:48:10.563 に答える
19

私も同じでした。Web サービスのポート番号が予期せず変更されたためです。

この問題は通常、プロジェクトのコピーが複数ある場合に発生します

私のプロジェクトは、メイン プロジェクト ファイルの Web.Config ファイルで割り当てた特定のポート番号で Web サービスを呼び出していました。ポート番号が予期せず変更されたため、ブラウザーは Web サービスを見つけることができず、そのエラーをスローしました。

以下の手順に従ってこれを解決しました:(Visual Studio 2010)

プロジェクトの [プロパティ] に移動します--> [ Web ] タブWeb serviceをクリックします --> [サーバー]セクションで --> [特定のポート] を確認し、メイン プロジェクトが Web サービスを呼び出しているポート を割り当てます。standard port number

これで問題が解決することを願っています。

乾杯 :)

于 2012-12-29T06:32:27.320 に答える
8

「インターネットオプション」でプロキシ設定を確認する必要があると思います。プロキシ/'hide ip' アプリケーションを使用している場合、この問題が発生する可能性があります。

于 2014-12-02T08:12:04.963 に答える
5

私も同じ問題を抱えていました。問題は、セレンサーバーを起動しなかったことです。セレンサーバーをダウンロードして起動しました。セレンサーバーを起動した後、問題はなくなり、すべて正常に機能しました。

これを参照してください: http://coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html

于 2013-07-11T06:47:38.173 に答える
4

私の場合、一部のドメインは機能しましたが、一部のドメインは機能しませんでした。web.config に組織のプロキシ URL への参照を追加すると、問題が修正されました。

<system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy proxyaddress="http://proxy.my-org.com/" usesystemdefault="True"/>
    </defaultProxy>
</system.net>
于 2016-05-16T20:46:01.347 に答える
4

Net TCP バインディングを使用した WCF サービスで同じエラーが発生しましたが、私の場合は以下のサービスを開始した後に解決しました。

Net.Pipe.Listener.Adapter

Net.TCP.Listener.Adapter

Net.Tcp ポート共有サービス

于 2014-04-09T11:25:21.403 に答える
3

AppFabric を使用するアプリケーションでこのエラーが発生しました。手がかりはDataCacheException、スタック トレースで取得していました。これが問題かどうかを確認するには、次の PowerShell コマンドを実行します。

@("AppFabricCachingService","RemoteRegistry") | % { get-service $_ }

これら 2 つのサービスのいずれかが停止している場合、このエラーが発生します。

于 2013-03-21T18:12:05.440 に答える
2

問題の原因はファイアウォールやプロセスが正しくリッスンしていないことではなく、私が使用した Microsoft から提供されたコード サンプルであるため、私が見つけたこの回答を共有したいと思います。

https://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx

この関数をほぼ記述どおりに実装しましたが、次のエラーが発生しました。

2016-01-05 12:00:48,075 [10] エラー - エラー: System.Net.Sockets.SocketException (0x80004005): ターゲット マシンがアクティブに拒否したため、接続できませんでした [fe80::caa:745: a1da:e6f1%11]:4080

このコードは、ソケットが接続されていることを示していますが、適切な通信に実際に必要な正しい IP アドレスではありません。(マイクロソフト提供)

private static Socket ConnectSocket(string server, int port)
    {
        Socket s = null;
        IPHostEntry hostEntry = null;

        // Get host related information.
        hostEntry = Dns.GetHostEntry(server);

        // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
        // an exception that occurs when the host IP Address is not compatible with the address family
        // (typical in the IPv6 case).
        foreach(IPAddress address in hostEntry.AddressList)
        {
            IPEndPoint ipe = new IPEndPoint(address, port);
            Socket tempSocket = 
                new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            tempSocket.Connect(ipe);

            if(tempSocket.Connected)
            {
                s = tempSocket;
                break;
            }
            else
            {
                continue;
            }
        }
        return s;
    }

最初に見つかった有効な IP のみを使用するようにコードを書き直しました。私はこれを使用する IPV4 のみに関心がありますが、localhost、127.0.0.1、および実際のネットワーク カードの IP アドレスで動作します。Microsoft が提供する例は失敗しました!

    private Socket ConnectSocket(string server, int port)
    {
        Socket s = null;

        try
        {
            // Get host related information.
            IPAddress[] ips;
            ips = Dns.GetHostAddresses(server);

            Socket tempSocket = null;
            IPEndPoint ipe = null;

            ipe = new IPEndPoint((IPAddress)ips.GetValue(0), port);
            tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            Platform.Log(LogLevel.Info, "Attempting socket connection to " + ips.GetValue(0).ToString() + " on port " + port.ToString());
            tempSocket.Connect(ipe);

            if (tempSocket.Connected)
            {
                s = tempSocket;
                s.SendTimeout = Coordinate.HL7SendTimeout;
                s.ReceiveTimeout = Coordinate.HL7ReceiveTimeout;
            }
            else
            {
                return null;
            }

            return s;
        }
        catch (Exception e)
        {
            Platform.Log(LogLevel.Error, "Error creating socket connection to " + server + " on port " + port.ToString());
            Platform.Log(LogLevel.Error, "The error is: " + e.ToString());
            if (g_NoOutputForThreading == false)
                rtbResponse.AppendText("Error creating socket connection to " + server + " on port " + port.ToString());
            return null;
        }
    }
于 2016-01-05T22:56:16.240 に答える
2

さて、今日初めて Windows 8 64 ビットで突然このエラーを受け取りました。my.ini がリセットされ、bin/mysqld ファイルが削除されていることがわかりました。"Program Files/MySQL/MySQL Server 5.6"フォルダー内。

それを修正するには、MySQLインストーラーを再度実行してサーバーのみをインストールし、 my.ini ファイルの最近のバージョンを から"ProgramData/MySQL/MySQL Server 5.6"コピーmy_2014-03-28T15-51-20.iniする必要がありました。に戻ります"Program Files/MySQL/MySQL Server 5.6"

MySQL が機能してからシステムに加えられた唯一の変更は、Native Instruments の Traktor 2 と Traktor Audio 2 サウンド カードをインストールしたことであり、これによってこの問題が発生することはありませんでした。また、私以外にこのシステムを使用した人はいません。誰かが手がかりを持っている場合は、私とこれに遭遇した他の人のためにこれを防ぐためにコメントしてください.

于 2014-04-07T16:56:36.080 に答える
2

ソリューション内のサービス参照用。

  1. ワークステーションを再起動します

  2. ソリューションを再構築する

  3. WCFclient プロジェクトのサービス参照を更新する

この時点で、システム アクセスを許可するメッセージ (Windows 7) を受け取りました。その後、サービス参照はエラーなしで適切に更新されました。

于 2015-06-22T12:55:13.763 に答える
2

もう一つの可能​​性 --

リッスンしている場所と同じ IP アドレスを開こうとしていることを確認してください。サーバー アプリは IPv6 を使用してホスト マシンの IP アドレスをリッスンしていましたが、クライアントはホスト マシンの IPv4 アドレスに接続しようとしていました。

于 2017-04-10T08:50:22.517 に答える
1

私のシナリオでは、次の 2 つのアプリケーションがあります。

  • アプリ1
  • アプリ2

仮定: App1 は、ポート 5000 で App2 のアクティビティをリッスンする必要があります。

エラー: App1 を起動して、存在しないゴースト タウンをリッスンしようとすると、エラーが発生します

解決策: 最初に App2 を起動してから、App1 を使用してリッスンしてみてください

于 2016-04-11T17:54:59.880 に答える
1

Web 層から WCFHost にあるサービスを参照すると、このエラーが発生しました。私にとってうまくいったことはすべての人に当てはまるとは限らないかもしれませんが、この答えはそうかもしれない人のために残しています。私の WCFHost のポート番号は IIS によってランダムに更新されました。Web 構成の svc 参照へのエンド ルートを更新するだけで済みました。問題が解決しました。

于 2013-02-28T16:58:14.570 に答える
0

Windows 7 Home Premium 64bit で WampServer 64bit を使用すると、まさにこの問題が発生しました。何時間もの実験の末、必要なのは my.ini の 1 行をコメントアウトするだけであることが明らかになりました。その後、うまくいきました。

1 行をコメントアウトした socket=mysql

古い /data/ ファイルを適切な場所に置くと、WampServer は、上書きする /mysql/ フォルダーを除いてすべてのファイルを受け入れます。そこで、以前の開発環境から /mysql/ ユーザー データのバックアップをインポートし、phpMyAdmin SQL ウィンドウで FLUSH PRIVILEGES を実行しました。よく働く。物事はこれほど簡単であってはならないので、何かが間違っているに違いありません。

于 2013-06-19T03:16:29.657 に答える
0

このエラーに遭遇し、解決するのに時間がかかりました。私の場合、https と net.tcp を同じポートの IIS バインディングとして構成しました。明らかに、同じポートに 2 つのものを持つことはできません。netstat -ap tcp コマンドを使用して、そのポートでリッスンしているものがあるかどうかを確認しました。誰も聞いていませんでした。不要なバインディング (私の場合は https) を削除すると、問題が解決しました。

于 2017-10-02T08:36:29.290 に答える
0

通常、接続スクリプトは使用するポートを指定しません。例えば:

$mysqli = mysqli_connect('127.0.0.0.1', 'user', 'password', 'database');

したがって、ポート 3306 を使用しないマネージャーに接続するには、接続要求でポート番号を指定する必要があります。

$mysqli = mysqli_connect('127.0.0.0.1', 'user', 'password', 'database', '3307');

MySQL または MariaDB データベース マネージャーの接続を確認するには、次のスクリプトを使用します: wamp(64)\www\testmysql.phpあなたのパラメータに。

于 2021-01-17T09:54:21.523 に答える
0

私は今日この問題に直面していました。私のはAsp.Net Core APIでPostgresql、データベースとして使用しています。このデータベースを Docker コンテナーとして構成しました。したがって、最初のステップは、データベースにアクセスできるかどうかを確認することでした。PgAdminこれを行うには、同じように構成したので、最初に検索しました。結果のアプリケーションをクリックすると、 http://127.0.0.1:23722/browser/にリダイレクトされます。そこで、左側のメニューでデータベースへのアクセスを試すことができます。私にとっては、下の画像のようにエラーが発生していました。

ここに画像の説明を入力

パスワードを入力して、アクセスできるかどうか試してください。私にとってはうまくいきませんでした。これは Docker コンテナーであるため、Docker デスクトップを再起動することにしました。これを行うには、タスク バーの Docker アイコンを右クリックし、[再起動] をクリックします。

Dockerを再起動すると、ログインしてデータベースを表示でき、Visual Studioでアプリケーションを再起動するとエラーがなくなりました

それが役に立てば幸い。

于 2019-06-18T08:05:18.620 に答える
0

この問題が頻繁に発生していました。サービスが実行されていないことがわかりましSQL Server Agentた。サービスを手動で開始すると、修正されました。サービスが実行されているかどうかを再確認します。

  1. プロンプトを実行し、入力services.mscしてEnterキーを押します
  2. サービス名を見つける - SQL Server Agent(インスタンス名)

が実行されていない場合SQL Server Agentは、サービスをダブルクリックしてプロパティ ウィンドウを開きます。次に、Startボタンをクリックします。それが誰かを助けることを願っています。

于 2016-05-08T20:34:27.630 に答える
0

承認の問題が原因である可能性があります。それが私の場合でした。たとえば、[Authorize("WriteAccess")]または[Authorize("ReadAccess")]コントローラー関数の上部にある場合は、それらをコメントアウトしてみてください。

于 2020-01-14T10:23:53.853 に答える