2012-12-16 143 views
2

我正在为WP8开发程序,它从JSON中检索数据。连接是安全的(网址以https开头)。有时候它可以正常工作,但有时候我开始接受例外 System.Net.WebException: The remote server returned an error: NotFound. 而且这个例外开始显示所有对所有https URL的请求。对于http URL,一切都很顺利。 URL确定,它在模拟器上的IE中打开。 我认为,证书可能存在问题,但它为什么有时会起作用?在Windows Phone 8仿真器上找不到SSL证书

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控件上出现错误消息 有没有什么办法可以安装证书呢?还是没有检查它的有效性?

+0

“远程服务器返回的NotFound”表明它可能是HTTP级别上的问题(请求未知资源),而不是指示证书相关问题。我建议倾销您请求的URL并在错误发生时分析它 - 这会否认或证实我的假设。与SSL相关的问题很难跟踪,因为有很多东西可以在“远程服务器”上找不到(CRL和OCSP响应,当选中时,可能无法访问或丢失)。 –

+0

向帖子添加了代码。我在调用EndGetResponse时发生错误。我的想法是在模拟器中,因为我没有更改请求的url。它在一段时间内工作正常。在任何构建之后,它可能会被破坏。请求的URL不会更改。 – vzaverugo

+0

现在,你知道如何检查wp中的根CA列表吗?我也想知道我的自签名证书是否安装成功。 – IloveIniesta

回答

0

我已经在由https连通一个服务器,我还没有找到如何解决这两个应用程序遇到了同样的问题。但是,我砍死它。当我得到了WebException: Remote server not found我将检查StatusCodeResponseStatus的网络例外情况,如果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

1

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

并且您将需要导入证书。到您的手机

+0

你能解释一下吗?我的自签名证书不起作用 –

相关问题