2

JSONからデータを取得するWP8用のプログラムを開発しています。接続は保護されています (URL は https で始まります)。正常に動作することもありますが、例外を受け取ることもあり System.Net.WebException: The remote server returned an error: NotFound. ます。この例外は、すべての https URL へのすべてのリクエストに対して表示され始めます。http URL の場合、すべてうまくいきます。URLはOK、エミュレーター上のIEで開く。証明書に問題がある可能性があると思いますが、なぜ時々機能するのですか?

public static void SendRequest(string requestUrl, Action<Stream, Exception> callback)
{
    var targetUri = new Uri(requestUrl);
    var request = (HttpWebRequest)WebRequest.Create(targetUri);
    request.Method = "POST";

    request.BeginGetResponse(ar => ProcessResponse(ar, callback), request);
}

public static void ProcessResponse(IAsyncResult callbackResult, Action<Stream, Exception> callback)
{
    try
    {
        var myRequest = (HttpWebRequest)callbackResult.AsyncState;
        var myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

        callback(myResponse.GetResponseStream(), null);

        myResponse.Close();
    }
    catch (Exception e)
    {
        callback(Stream.Null, e);
        Debug.WriteLine("Error in RequestHelper.ProcessResponse\nErrorMessage - " + e.Message);
    }
}

更新:問題は間違いなく SSL 証明書にあります。WebBrowser コントロールで Web ページを開こうとすると、「このサイトのセキュリティ証明書に問題があります。」というメッセージが表示されます。「ウェブサイトに進む」をクリックしましたが、何も変わりません。ページは、エミュレーターの IE で開くことができます。証明書をインストールしようとしました (サイトからエクスポートし、IE でダウンロードしました。証明書が正常に追加されたというメッセージが表示されました。しかし、WebBrowser コントロールにまだエラー メッセージが表示されます。証明書をインストールする方法はありますか?それとも有効性をチェックしませんか?

4

2 に答える 2

0

サーバーと通信する 2 つのアプリケーションで同じ問題が発生しましたがhttps、修正方法がわかりません。しかし、私はそれをハッキングしました。を取得すると、Web 例外の とWebException: Remote server not foundをチェックし、そうでない場合(アプリの高速切り替えでそのようなステータスが得られます)、要求を繰り返します。次のようになります。StatusCodeResponseStatusStatusRequestCancelled

var httpStatusCode = ((HttpWebResponse) webException.Response).StatusCode;
                if (httpStatusCode == HttpStatusCode.NotFound || 
                    httpStatusCode == HttpStatusCode.GatewayTimeout ||
                    httpStatusCode == HttpStatusCode.InternalServerError)
                {
                    if (webException.Status == WebExceptionStatus.UnknownError && !configuration.IsResending)
                    {
                        configuration.IsResending = true;
                        ResendRequest(configuration, successAction);
                        return;
                    }

                    configuration.IsResending = false;
                    throw new ServerTemporaryUnavailabeException();
            }

そして、リクエストの2回目の実行は返されませんWebException: Not found

于 2013-06-08T08:29:00.083 に答える