0

私のアプリケーションでは、コードを使用して、各投稿の間に 2 秒間隔で URL を使用してコンテンツを Web プロキシに送信しています。以下のコードで投稿するメッセージは静的文字列として指定されていますが、元のアプリケーション コードでは動的になります。

for (ic = 0; ic < 30; ic++)
{
    using(HttpClient httpClient = new HttpClient())
    {
        Encoder encoder = new Encoder(); //This is a class which we created
        AuthorizationHeaders authorizationHeaders = encoder.getAuthorization(PARTNER_ID, PARTNER_KEY, URL, "POST", "application/xml");

        httpClient.DefaultHeaders.Add("Accept", "*/*");
        httpClient.DefaultHeaders.Add("Authorization", authorizationHeaders.getAuthorizationHeader());
        httpClient.DefaultHeaders.Add("Expires", authorizationHeaders.getExpiresHeader());
        httpClient.DefaultHeaders.Add("origPartnerId", "MyWebSite");
        httpClient.DefaultHeaders.Add("appId", "440");
        httpClient.DefaultHeaders.Add("Content-Type", "application/xml");
        string inputUrl = ConfigurationManager.AppSettings["url"];
        String detailRequest = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Message><Details><Name>Bob</Name><Age>45</Age></Details></Message>";
        var content = HttpContent.Create(detailRequest, Encoding.UTF8, "application/xml");
        response = httpClient.Post(inputUrl, content).EnsureStatusIsSuccessful();
        Thread.Sleep(2000);
    }
}

しかし、プロキシに連絡すると、以下の例外が発生します。メッセージはしばらく経ちますが、最終的にはこの例外が発生します。

GetResponse タイムアウト ---> System.TimeoutException: GetResponse タイムアウト ---> System.Net.WebException ---> System.Net.WebException: Microsoft の System.Net.HttpWebRequest.GetResponse() で操作がタイムアウトしました.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponseSync(WebRequest request, IAsyncResult result) at Microsoft.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponse(HttpTransportAsyncResult self, IAsyncResult result, Func`3 getResponse) --- 内部例外スタック トレースの終了 --- - -- 内部例外スタック トレースの終了 --- Microsoft.Http.AsyncResult.End[TAsyncResult](IAsyncResult 結果、Boolean throwException) で Microsoft.Http.HttpWebRequestTransportStage.EndProcessRequestAndTryGetResponse(IAsyncResult 結果、HttpResponseMessage&)Response, Object& state) at Microsoft.Http.HttpWebRequestTransportStage.ProcessRequestAndTryGetResponse(HttpRequestMessage request, HttpResponseMessage& response, Object& state) at Microsoft.Http.HttpStageProcessingAsyncResult.NextRequest(HttpStageProcessingAsyncResult self) --- 内部例外スタック トレースの終了 --- Microsoft. Http.HttpStageProcessingAsyncResult.Complete(HttpStage ステージ、例外 e) で Microsoft.Http.HttpStageProcessingAsyncResult.NextRequest(HttpStageProcessingAsyncResult 自身) で Microsoft.Http.HttpClient.Send(HttpRequestMessage リクエスト) で Microsoft.Http.HttpClient.Send(HttpMethod メソッド、Uri uri 、RequestHeaders ヘッダー、HttpContent コンテンツ) を Microsoft.Http.HttpMethodExtensions.Method(HttpClient クライアント、HttpMethod メソッド、Uri uri、HttpContent 本体) で Microsoft.Http.HttpMethodExtensions.Method(HttpClient クライアント、HttpMethod メソッド、文字列 uri、HttpContent 本体)

しかし、このプロキシは別のプロキシへのリダイレクトにすぎません。だから私もそれを直接試しました。そこでは、これを 2 ~ 3 回正常に実行できましたが、その後別の例外が生成されました。もう一度やり直しましたが、今回は最初の試行自体に例外がありました。しばらく待ってから再試行しましたが、驚くべきことに、2〜3回は通過し、再び例外が発生しました. 今回取得している例外は異なり、これは...

Microsoft.Http.HttpStageProcessingException ---> System.Net.WebException ---> System.Net.WebException: 基になる接続が閉じられました: 接続が予期せず閉じられました。System.Net.HttpWebRequest.GetResponse() で Microsoft.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponseSync(WebRequest 要求、IAsyncResult 結果) で Microsoft.Http.HttpWebRequestTransportStage.HttpTransportAsyncResult.PopulateWebResponse(HttpTransportAsyncResult 自己、IAsyncResult 結果、Func3 getResponse) --- End of inner exception stack trace --- at Microsoft.Http.AsyncResult.End[TAsyncResult](IAsyncResult result, Boolean throwException) at Microsoft.Http.AsyncResult.End[TAsyncResult](IAsyncResult result) at Microsoft.Http.AsyncResult1. Microsoft.Http.HttpWebRequestTransportStage.EndProcessRequestAndTryGetResponse (IAsyncResult 結果、HttpResponseMessage& 応答、Object& 状態) での End (IAsyncResult 結果) Microsoft.Http.HttpWebRequestTransportStage.ProcessRequestAndTryGetResponse(HttpRequestMessage 要求、HttpResponseMessage& 応答、Object& 状態) で Microsoft.HttpStageProcessingAsyncResult。 NextRequest(HttpStageProcessingAsyncResult self) --- 内部例外スタック トレースの終了 --- Microsoft.Http.HttpStageProcessingAsyncResult.Complete(HttpStage ステージ、例外 e) で Microsoft.Http.HttpStageProcessingAsyncResult.NextRequest(HttpStageProcessingAsyncResult self) で Microsoft.Http.HttpStageProcessingAsyncResult ..ctor(HttpStageProcessingAsyncState 状態、AsyncCallback コールバック、オブジェクト ユーザー) Microsoft.Http.HttpClient で。Send(HttpRequestMessage リクエスト) at Microsoft.Http.HttpClient.Send(HttpMethod メソッド、Uri uri、RequestHeaders ヘッダー、HttpContent コンテンツ) at Microsoft.Http.HttpClient.Send(HttpMethod メソッド、Uri uri、HttpContent コンテンツ) at Microsoft.Http.HttpMethodExtensions .Method(HttpClient クライアント、HttpMethod メソッド、Uri uri、HttpContent 本体) Microsoft.Http.HttpMethodExtensions.Method(HttpClient クライアント、HttpMethod メソッド、文字列 uri、HttpContent 本体) で Microsoft.Http.HttpMethodExtensions.Post(HttpClient クライアント、文字列 uri) 、HttpContent 本体)Microsoft.Http.HttpMethodExtensions.Post (HttpClient クライアント、文字列 uri、HttpContent 本体) の Http.HttpMethodExtensions.Method (HttpClient クライアント、HttpMethod メソッド、文字列 uri、HttpContent 本体)Microsoft.Http.HttpMethodExtensions.Post (HttpClient クライアント、文字列 uri、HttpContent 本体) の Http.HttpMethodExtensions.Method (HttpClient クライアント、HttpMethod メソッド、文字列 uri、HttpContent 本体)

私は過去数日間この問題に取り組んでおり、いくつかの記事やスタックオーバーフローの質問も読んだことがありますが、何も役に立ちませんでした。前もって感謝します...

4

1 に答える 1

0

一部の企業のプロキシルールは、POSTリクエストで問題を引き起こします。

GETリクエストは正常に機能します。OSプロキシ設定が無効になっていることを確認してください。

Windows 7:[コントロールパネル]>[インターネットオプション]>[接続](タブ)。

次に、[LAN設定]ボタンをクリックし、[LANにプロキシサーバーを使用する]のチェックを外します。

または、ネットワーク管理者に、使用している接続を除外リストに追加してもらいます。

于 2013-03-07T13:24:51.473 に答える