0

Win 7 IISで非常に単純なWebアプリケーション(Asp.Net MVC3)を実行しています。helloworldを返す非常に単純なHTTPGETAPIがあります。

呼び出し:

http://localhost/helloworld

戻り値:

Hello World!

これはブラウザ上で完全に機能します。しかし、Webクライアントを使用してこのURLをプルしようとするアプリを作成すると、次のエラーが発生します。

{"Unable to read data from the transport connection: The connection was closed."}

私のコードは次のとおりです

WebClient web = new WebClient();
var response = web.DownloadString("http://localhost/helloworld");

私のIIS設定は次のとおりです ここに画像の説明を入力してください

私は何を見るべきですか?私はこれに何時間もいました、そして私は試すためのオプションを使い果たしました!どんな助けでも本当にありがたいです!

ありがとう。

4

2 に答える 2

0

WebClientが一部のHTTPヘッダーを送信しないことが原因だと思います。

WebClientインスタンスは、デフォルトではオプションのHTTPヘッダーを送信しません。リクエストでオプションのヘッダーが必要な場合は、ヘッダーコレクションにヘッダーを追加する必要があります。たとえば、応答にクエリを保持するには、user-agentヘッダーを追加する必要があります。また、ユーザーエージェントヘッダーがない場合、サーバーは500(内部サーバーエラー)を返す場合があります。http://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.80).aspx

代わりにHttpWebRequestを使用してみてください。http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

于 2012-04-12T14:01:23.963 に答える
0

私はついに問題が何であるかを理解し、それがIIS固有の問題ではなく、私が傾倒していた問題であることが判明しました。それは私が書いたコードの問題であることが判明しました。

他の誰かが同様の問題に遭遇した場合に備えて、ここに詳細を追加します。

リクエストの応答をJSONオブジェクトとして送信するために使用していたコードに、次のメソッドがありました。

private void sendJsonResult(string result) {
    Response.StatusCode = 200;
    Response.Headers.Add("Content-Type", "application/json; charset=utf-8");
    Response.Flush();
    Response.Write(result);
    Response.End();
    Response.Close();    // <-- This is the problem statement
}

少し調べてみると、Response.Close()を実行するべきではないことがわかりました。

これについてのより良い説明はここにあります。その行を削除すると、消費するアプリとWebブラウザーの両方で完全に機能し始めました。

上記のリンクを読むと、Response.Close()を使用すべきではない理由が明確に理解できます。そのため、その説明には触れません。今日、新しいことを学びました。

于 2012-04-21T13:27:16.400 に答える