2

我正在为 WP8 开发程序,从 JSON 中检索数据。连接是安全的(网址以 https 开头)。有时它工作正常,但有时我开始收到异常 System.Net.WebException: The remote server returned an error: NotFound. 并且这个异常开始显示所有对所有 https URL 的请求。对于 http URL,一切正常。网址没问题,在模拟器上用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 控件上打开网页时,我收到一条消息 - “我们在使用此站点的安全证书时遇到问题。”。我点击了“继续访问网站”,但没有任何改变。该页面仍然可以通过 IE 在模拟器上打开。我尝试安装证书(从站点导出,并使用 IE 下载。我收到消息,该证书已成功添加。但我在 WebBrowser 控件上仍然有错误消息。有没有办法安装证书?还是不检查它的有效性?

4

2 回答 2

1

自签名证书工作正常,但您的证书中需要正确的通用名称 (CN)。CN 必须与您的服务器域相同

而且你需要导入证书。到你的手机

于 2013-10-21T13:36:22.753 回答
0

我在与服务器通信的两个应用程序中遇到了同样的问题,但https我还没有找到解决方法。但我破解了它。当我得到 a 时,WebException: Remote server not found我将检查 aStatusCodeResponseaStatus的 web 异常,如果Status不是RequestCancelled(你在快速应用程序切换中获得这样的状态)我重复请求。它看起来像这样:

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

并且请求的第二次执行不返回WebException: Not found

于 2013-06-08T08:29:00.083 回答