したがって、次のコードを使用してください (実際のアプリケーションの非常に単純化されたテスト コード)。
public string Test()
{
string content = @"<entry xmlns:yt=""http://gdata.youtube.com/schemas/2007"" xmlns:media=""http://search.yahoo.com/mrss/"" xmlns=""http://www.w3.org/2005/Atom""><title>Matt Test Event</title><summary>Testing 1234</summary><yt:when start=""2013-07-08T21:56:49.434569Z"" /></entry>";
string requestUrl =
"https://gdata.youtube.com/feeds/api/users/xossports/live/events/fv7cuJbtZrGzYFNNa-WfWubz3qleq8ai?inline=true";
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Accept = "application/atom+xml";
request.ContentType = "application/atom+xml";
request.Headers.Add("GData-Version", "2");
request.Headers.Add("X-GData-Key", string.Concat("key=", DEVELOPER_KEY));
request.Method = HttpMethods.Post;
//using (var writer = new StreamWriter(request.GetRequestStream()))
// writer.Write(content);
var requestBody = XDocument.Parse(content);
using (var writer = XmlWriter.Create(request.GetRequestStream()))
requestBody.Save(writer);
using (var response = (HttpWebResponse)request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
return reader.ReadToEnd();
}
static void Main(string[] args)
{
using (var service = new YouTubeService())
Console.WriteLine(service.Test());
}
.Net 4 フレームワークを対象とするコンソール アプリケーションでこれを実行すると、すべて正常に動作します (一部の設定が正しく設定されていないため、401 の不正な要求応答が正しく返されます)。
ただし、アプリケーションが .Net 3.5 フレームワークをターゲットにしているときにこれを実行すると、request.GetResponse()
呼び出しでフリーズします。エラーは発生せず、タイムアウトも発生せず、無期限にハングします。
コメントアウトされたStreamWriter()
呼び出しは、XmlWriter を使用する代わりにプレーン文字列をストリームに書き込むと完全に正常に動作することを示しています。そのため、(何時間も髪を引っ張った後) 完全にうまく回避できますが、なぜXmlWriter
応答が発生するのか誰にもわかりません。 .net 3.5でのみ完全にハングするように呼び出しますか?