WP7 не работает с Freshbooks API через https - PullRequest
1 голос
/ 13 марта 2011

У меня есть этот код, который работает в консольном приложении Windows, но не работает в Windows Phone 7. Я уже написал приложение для Basecamp, которое использует аналогичный код, но я думаю, что проблема связана с HTTPS FreshBooks. Я только что провел несколько часов, пытаясь заставить его работать.

Обычно строка, использующая var response = request.EndGetResponse(ar) as HttpWebResponse, выдает исключение:

Удаленный сервер возвратил ошибку: NotFound.

Я могу сделать звонок успешно с помощью curl и используя тот же код в консольном приложении. Итак, я знаю, что проблема не в моем 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;
}

1 Ответ

0 голосов
/ 13 марта 2011

Проведя часы прошлой ночью на этом. Я рассчитывал через 3 минуты этим утром. Удивительно, что какой-то сон сделает с тобой.

Оказывается, что Fiddler нарушил трафик https и испортил отладку. Мне пришлось закрыть фидлер и перезапустить эмулятор.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...