1

Cassiniの異なるインスタンスで同じマシン上で実行される2つのASP.NETアプリケーションをデバッグし、 。 1つのアプリには、ポート100上で実行され、ポート90上で実行されている他のアプリからGET要求を実行したいだから、このコードを実行される:ブラウザで発行されたときに要求は正常に処理されましたが、同じマシン上のASP.NETアプリケーションによって発行された場合は処理されません。

WebRequest request = WebRequest.Create(
    "http://localhost:90/Controller/Action?Param1=foo&Param2=bar"); 
request.Timeout = 10000; 
request.GetResponse(); 

をし、最後の行はWebExceptionコードとヌルのInnerException HTTP 400とをスローします。クリップボードに同じURLをコピーして同じマシン上のIEにコピーすると、要求はポート90のアプリケーションにキューイングされ、その/Controller/Action/が呼び出され、パラメータも正常に渡されます。

ここで問題が起きる可能性がありますが、どうすれば解決できますか?

+0

HTTP400が不正なリクエストです - 'http:// localhost:90 ...'を試してください。また、内部例外は何ですか?あなたはデバッガを介して要求しているアプリケーションを実行できますか? – Jason

+0

@ Jason:私の不具合 - パスに既に「http://」接頭辞があり、InnerExceptionがnullの場合、質問を更新しました。 – sharptooth

+0

これはCassiniではなくIISを使用してテストできますか? Iveは過去に、2つの動作が異なる問題がありました。あなたのアプリケーションが本番環境で使用されるなら、私はあなたがIISを使用すると推測しています。 – WooHoo

答えて

0

2時間のデバッグ - ポート90のサービスはポート100のサービスにリクエストをリダイレクトしますが、URLに必要なパラメータを提供しないことが判明したので、ポート100のサービスのハンドラは例外をスローし、GetResponse()によって報告されたHTTP 400を返します。リダイレクトがこの特定の要求に意味をなさないため、この特定の要求にはリダイレクトがないようにロジックを変更するというソリューションでした。

そして陪審員は、CassiniとASP.NETの両方が無罪であると判断します。

1

私はあなたがurlのparamsなしで試みるべきだと思います。

WebRequest request = WebRequest.Create("localhost:90/Controller/Action"); 
request.Timeout = 10000; 
request.GetResponse(); 

もしうまくいけば、paramsの使用を許可するためにいくつかのユーザーエージェントヘッダーを追加する必要があります。

また、WebClientをご覧ください。 MSDN

個人的に私はこの種のソリューションを開発するためにIISExpressまたはIISを使用します。

ここでは、外部からの見解では、ブラウザからのajax呼び出しによって2番目のwebメソッドを呼び出し、javascript(jQuery)を使用して結果クライアントを集約することを検討してください。

関連する問題