2011-03-13 49 views
1

我有這個代碼在Windows控制檯應用程序中工作,但在Windows Phone 7中不起作用。我已經爲使用類似代碼的Basecamp編寫了一個應用程序,但我認爲問題與FreshBooks HTTPS有關。我剛花了幾個小時試圖使它工作。WP7通過https訪問Freshbooks API不起作用

基本上使用var response = request.EndGetResponse(ar) as HttpWebResponse行拋出異常:

The remote server returned an error: NotFound.

我可以撥打電話成功地捲曲並在控制檯應用程序中使用相同的代碼。所以,我知道問題不在於我的API令牌,FreshBooks帳戶或XML格式!

private static void TestFreshbooks() 
{ 
    var url = "https://XXXXXX.freshbooks.com/api/2.1/xml-in"; 
    HttpWebRequest request = CreateRequest(url); 

    request.BeginGetRequestStream(CreateRequestCallback, 
           new RequestState(null) 
           { 
            Request = request, 
            Callback = (args) => 
            { 
             Debug.WriteLine(args); 
            }, 
           }); 
} 

private static void CreateRequestCallback(IAsyncResult ar) 
{ 
    var state = ar.AsyncState as RequestState; 
    var request = state.Request; 

    var xml = "<request method='client.list'></request>"; 

    using (Stream stream = request.EndGetRequestStream(ar)) 
    { 
     byte[] data = Encoding.UTF8.GetBytes(xml);// encoder.GetBytes(postData); 
     stream.Write(data, 0, data.Length); 
    } 

    request.BeginGetResponse(CreateResponseCallback, state); 
} 

private static void CreateResponseCallback(IAsyncResult ar) 
{ 
    try 
    { 
     var state = ar.AsyncState as RequestState; 
     var request = state.Request; 
     using (var response = request.EndGetResponse(ar) as HttpWebResponse) 
     { 
      using (var rs = response.GetResponseStream()) 
      { 
       var sr = new StreamReader(rs); 
       var results = sr.ReadToEnd(); 
       Debug.WriteLine(results); 

      } 
     } 
    } 
    catch (Exception e) 
    { 
     Debug.WriteLine(e); 
    } 
} 


private static HttpWebRequest CreateRequest(string url) 
{ 
    var request = WebRequest.Create(new Uri(url)) as HttpWebRequest; 
    var token = "XXXXXXX"; 

    request.AllowAutoRedirect = false; 
    request.UserAgent = "freshwp7test"; 
    request.Method = "POST"; 
    request.Credentials = new NetworkCredential(token, "X"); 

    return request; 
} 

回答

0

在這之後花了幾個小時。我今天早上在3分鐘內想到了。有些睡眠會對你有所幫助,這真是太神奇了。

事實證明,提琴手正在打破https流量,並搞砸了調試。我不得不關閉小提琴手並重新啓動模擬器。

謝謝。