在WP7项目中找不到HttpWebRequest.GetResponse()

13

我正在尝试使用HttpWebRequest发送GET请求。
我在网络上找到了很多示例(例如,这里...只需转到Scrape()方法)。它们基本上都是做同样的事情:

通过使用WebRequest.Create(URL)创建一个HttpWebRequest对象并将其转换为HttpWebRequest,然后使用HttpWebRequestGetResponse()方法获取响应。

问题是,GetResponse()似乎不存在于HttpWebRequest或其基类WebRequest中。我的唯一选择是使用BeginGetResponse()

我发现的唯一区别是GetResponse()是同步的,而BeginGetResponse()是异步的,并且Silverlight仅允许使用异步方法。嗯,这对我没有任何帮助,因为整个项目是XNA项目,这是我在其中创建的简单C#类。
更准确地说,这是一个在XNA 4.0中创建的Windows Phone游戏。

HttpWebRequest webRequest = WebRequest.Create(URL) as HttpWebRequest; 
StreamReader responseReader = new StreamReader( 
         webRequest.GetResponse().GetResponseStream());

有没有人知道为什么我没有GetResponse()方法?


3
这是针对Windows Phone的吗?如果是,那么请求仍然只能是异步的。 - keyboardP
我从来没有遇到过问题。请参见GetResponse() - 但我只使用“正常”的.NET。请注意任何XNA的差异。 - user166390
啊,我明白了。没错,是WP7。我刚刚编辑了我的问题并加上了这个信息,在我看到你的回答之前。呵呵,要是我早两个小时知道这个就好了,那肯定能帮我省去不少麻烦。感谢你的帮助。 - Darkshore Grouper
@keyboardP 您应该将其发布为答案,以便可以被接受 ;) - Oscar Mederos
1个回答

16

XNA 4对于Windows Phone 7只能进行异步调用。你可能会发现这篇文章底部的代码也很有帮助。

来自该帖子的代码:

protected override void Initialize()
{
    string webServiceAddress = @"http://localhost/service/service1.asmx";           
    string methodName = "HelloWorld";

    string webServiceMethodUri = string.Format("{0}/{1}", webServiceAddress, methodName);

    HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(webServiceMethodUri);
    httpWebRequest.Method = "POST";

    httpWebRequest.BeginGetResponse(Response_Completed, httpWebRequest);

    base.Initialize();
 }

 void Response_Completed(IAsyncResult result)
 {
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);

    using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
    {
        string xml = streamReader.ReadToEnd();

        using(XmlReader reader = XmlReader.Create(new StringReader(xml)))
        {
             reader.MoveToContent();
             reader.GetAttribute(0);
             reader.MoveToContent();
             message = reader.ReadInnerXml();
        }
    }
 }

1
很好,这正是我正在寻找的。谢谢! - Darkshore Grouper
@Asahi 谢谢你告诉我。我已经更新了帖子中的链接(http://xboxforums.create.msdn.com/forums/p/54886/333680.aspx)。 - keyboardP
问题... base.initialise是做什么的(它不一定存在,对吧)?BeginGetResponse会锁定线程,还是base.initialise会立即执行? - Daan Luttik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接