在Metro App的Backgroud服务中发送和接收Web请求



我正在使用Metro应用程序,在该应用程序中,我在该应用程序中发送了Web请求,但没有获得Web响应。我这样编码:

private void SendRequest(string url, Action OnResponse, string requestParameter)
{ 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
request.Method = "POST";
request.ContentType = "text/xml";

request.BeginGetRequestStream(delegate(IAsyncResult req)
{
    var outStream = request.EndGetRequestStream(req);
    using (StreamWriter w = new StreamWriter(outStream))
    w.Write(requestParameter);
    request.BeginGetResponse(delegate(IAsyncResult result)
    {
      try
      {
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
        using (var stream = response.GetResponseStream())
        {
           using (StreamReader reader = new StreamReader(stream))
           {
             string response1 = reader.ReadToEnd();
             OnResponse(response1);
           }
        }
      }
     catch (Exception ex)
     {
     }
    }, null);
  }, null);

}

我也尝试过这样的尝试

HttpClient client = new HttpClient();
HttpContent content = new StringContent(requestParameter);
conent.Headers.ContentType = new             System.Net.Http.Headers.MediaTypeHeaderValue("text/xml");
HttpResponseMessage response = await client.PostAsync(url, content);

有什么原因是我没有得到响应或任何其他方法来执行此操作。我在正常执行中执行了相同的代码,并且在背景服务中工作不完美。

它只是两行要添加,现在正常工作。在背景服务的起点处创建一个背景taskdeferral类的实例,并调用其完整方法,您认为这是最后一个任务。

private brockdttaskdeferral _deferral = taskInstance.getDeferral();

_deferral.complete();

实际上发生的是异步调用并不是在调用。背景服务只是执行代码,不等待异步调用。因此,通过使用延期,它通知服务也有一些异步调用,并且完整的方法通知一切都将完成。

最新更新