HTTP通信で受信したデータの読み込みに失敗する。
2日半解決できなかったので、忘備録としてメモします。
*環境
・C# アプリケーションが2つ ・Windows 10*やりたいこと
HTTPプロトコルを使用して、2つのアプリケーション間でJSONデータをやり取りする。※JSONの利用の理由
データの受け渡しにJSONを利用。
データをバイナリにして受け渡しすることで、ちょっとずつデータが転送されるので軽快なのが良いらしい。
★問題の原因
Stream.ReadToEnd(読み込みたいStream)で リクエストを送信する/要求の応答を受信する側のアプリケーションで、 レスポンスで受け取ったデータを読み込みたいのに、時間がなぜかかかりすぎてしまい タイムアウト(WebException)が発生してしまう。⇒原因は応答を返す側のアプリケーションで利用しているHTTPListenerResponseのClose()し忘れ
でした。使い慣れていないのなら、使う前にドキュメントを読み込む必要がありますね。。
*試した解決策
ネットで検索した以下解決策を試行してみました。結果的に全く違うことが原因。 HTTPListenerを扱うのが初めてだったため、解決が遅れた。・連続でWebRequestを投げるとオブジェクトの破棄忘れや残骸で遅くなってしまうことがある
→1回しかリクエストは投げてない・ブラウザで同リクエストを投げてみると、レスポンスは正常に返っている。
JsonTextReaderのサンプルは正常に動くが、こちらはJsonフォームのStringを読み込むのであって StreamをStringに直したい、という要求に合わない。 →レスポンスは返ってきていたものの、中身が不足していたため、Streamに変換できなかった→読み込めなかったものと見られる。・MemoryStreamに変換し、それをStringに格納してみる→失敗
キャストは失敗する(コンパイルは成功する)ので、 変換元のStream型の変数.CopyTo(変換先のMemoryStream型の変数) で変換してから読み込み。 →結果的に同じ処理をしている(レスポンスのStreamを読み込んでいる)ため解決できない。以上