Httpを使ってXmlを返すサービスについて質問です。
HttpRequestに対してサーバが簡単なXmlを返すものなんですが、クライアント側で受け取りに失敗します。(※(2)の箇所)
サーバ側で送出したメッセージを全て読み込むためには何を使うのが定石ですか?
//サーバ側のコード
[WebService(Namespace = "
http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MyHttpService : IHttpHandler{
public void ProcessRequest(HttpContext context){
HttpResponse res = context.Response;
res.ContentType = "text/xml";
res.Write("<xml>hoge</xml>");
res.Flush();
res.Close();//※(1) 接続を開放しなきゃ、と思いCloseを後から追加した。
}
}
//クライアント側のコード
private void btnMyHttpService_Click(object sender, EventArgs e){
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("
http://localhost:2779/MyHttpService.ashx");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
using (Stream stream = res.GetResponseStream()){
StreamReader reader = new StreamReader(stream);
//※(2) ここで「転送接続からデータを読み取れません: 接続は閉じられました。。」という例外発生
//クライアントまで到達している電文を最後まで取りたいだけなんですが・・
string content = reader.ReadToEnd();
stream.Close();
}
}
※(1)にHttpResponse.Close();を追加したところ、
※(2)でSystem.IO.IOException例外が発生するようになってしまった。
1.GetResponseStream()で得られたStreamに対してStreamReader.ReadToEndを使うのがよくない
2.Httpハンドラでは普通HttpResponse.Closeを呼ぶのがよくない
とかあるのでしょうか?