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

时间:2011-05-11 23:51:15

标签: c# http windows-phone-7 httpwebrequest xna

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

使用WebRequest.Create(URL)创建HttpWebRequest对象并将其强制转换为HttpWebRequest,然后使用GetResponse()中的HttpWebRequest方法获取响应。< / p>

事情是,GetResponse()HttpWebRequest(它是基类)中似乎不存在WebRequest。我唯一的选择是使用BeginGetResponse()

我发现唯一的事情是GetResponse()是同步的,而BeginGetResponse()是异步的,而Silverlight只允许异步的。{1}}。好吧,这对我没有任何帮助,因为整个事情都是一个XNA项目,这是我在里面创建的一个简单的C#类。
更确切地说,这是一款在XNA 4.0中创建的Windows Phone游戏

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

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

1 个答案:

答案 0 :(得分:16)

Windows Phone 7的XNA 4只能进行异步调用。您可能会发现this post底部的代码也很有用。

该帖子的代码:

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();
        }
    }
 }