0

バックグラウンド サービスで 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);

これを行うための応答またはその他の方法が得られない理由はありますか? 通常の実行で同じコードを実行し、完璧に動作しますが、バックグラウンド サービスでは動作しません。

4

1 に答える 1

0

追加するのはわずか 2 行で、現在は機能しています。バックグラウンド サービスの開始点で BackgroundTaskDeferral クラスのインスタンスを作成し、これが最後のタスクであると思われる場所でその complete メソッドを呼び出します。

プライベート BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

_deferral.Complete();

実際に起こっていたのは、非同期呼び出しが呼び出されていないことです。バックグラウンド サービスはコードを実行するだけで、非同期呼び出しを待機しません。そのため、deferral を使用することで、いくつかの非同期呼び出しもあることがサービスに通知され、complete メソッドはすべてが完了することを通知します。

于 2012-10-26T09:36:31.850 に答える