所以取下面的代码(我们实际应用的非常简化的测试代码):
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 中调用完全挂起?