4

私はWindows Phone 8アプリを開発しています。私のアプリでは、サービスを呼び出して、いくつかのデータをアプリにダウンロードしています。

リクエストに httpwebrequest を使用していますが、httpwebrequest オブジェクトにタイムアウトを設定できません。

これは、私が httpwebrequest を作成して使用した方法です:-

public async Task<string> ServiceRequest(string serviceurl, string request, string methodname)
        {
            string response = "";
            try
            {

                var httpwebrequest = WebRequest.Create(new Uri(serviceurl)) as HttpWebRequest;
                httpwebrequest.Method = "POST";
                httpwebrequest.Headers["SOAPAction"] = "http://tempuri.org/" + iTestservice + "/" + methodname + "";
                httpwebrequest.ContentType = "text/xml";


                byte[] data = Encoding.UTF8.GetBytes(request);
                using (var requestStream = await Task<Stream>.Factory.FromAsync(httpwebrequest.BeginGetRequestStream, httpwebrequest.EndGetRequestStream, null))
                {
                    await requestStream.WriteAsync(data, 0, data.Length);
                }

                response = await httpRequest(httpwebrequest);

            }
            catch (Exception ex)
            {

                return null;
            }

            return response;

        }

        public async Task<string> httpRequest(HttpWebRequest request)
        {
            string received;

            using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)))
            {
                using (var responseStream = response.GetResponseStream())
                {
                    using (var sr = new StreamReader(responseStream))
                    {

                        received = await sr.ReadToEndAsync();
                    }
                }
            }

            return received;
        }

私の疑問は:-

1) タイムアウト プロパティを Httpwebrequest に設定するにはどうすればよいですか??

2) Windows Phone 8 アプリでタイムアウト プロパティを設定するには、どのような方法がありますか??

私にお知らせください 。

前もって感謝します。

4

2 に答える 2

9

HttpWebRequest.Timeoutそのプラットフォームには存在しないため、Windows Phone では使用できません。

ベータ ライブラリの使用を受け入れる場合は、 HttpClientNuGet を介してインストールし、その Timeoutプロパティを使用できます。

それ以外の場合は、 Microsoft.Bcl.AsyncTaskEx.Delayの一部であるを使用することをお勧めします。そのライブラリをインストールしたら、次の行を置き換えます。

response = await httpRequest(httpwebrequest);

これとともに:

var httpTask = httpRequest(httpwebrequest);
var completeTask = await TaskEx.WhenAny(httpTask, TaskEx.Delay(5000));
if (completeTask == httpTask)
  return await httpTask;
else
  return null; // timeout
于 2013-02-23T14:07:39.743 に答える
0

HttpStatusCode を使用できます。HttpStatusCode は、HttpWebRequest でエラーの種類を取得するために使用できる列挙型です。

catch(WebException ex) {

HttpWebResponse response = (HttpWebResponse)ex.Response;

if(response.StatusCode==HttpStatusCode.GatewayTimeout) { }

}

GatewayTimeout は、中間プロキシ サーバーが別のプロキシまたはオリジン サーバーからの応答を待っている間にタイムアウトになったことを示します。詳細については、msdn サイトを参照してください。

于 2015-02-02T10:27:06.533 に答える