2011-01-21 2 views
1

Я написал очень простое приложение C# для отправки твитов между машинами Windows. Для этого каждая конечная точка (например, это настольное приложение C# .NET, использующее библиотеку TweetSharp) имеет таймер, и когда событие Elapsed запускает все сообщения, собранные вместе с вызовом GetDirectMessages(), эти сообщения обрабатываются и обрабатываются посредством конечной точки.Последние изменения в API Twitter?

Моя проблема в том, что я построил это в течение нескольких часов две недели назад, и все сработало нормально. Я вымыл его и казнил неделю назад, никаких проблем. Теперь я нарушаю его сегодня, и я получаю очень странное исключение (см. Раздел ИСКЛЮЧЕНИЕ), которые исходят из строки «IEnumerable directMessage = service.ListDirectMessagesReceived();» (см. раздел ИСТОЧНИК). Мой вопрос заключается в том, что, поскольку мой код не изменился, возможно ли, что API имеет (я знаю, что я знаю ужасно маловероятно). Есть ли у каких-то из стоящих и эрудированных членов StackO какие-то мысли?

Btw, я проверил, и мой ConsumerKey/Secret действителен, также как и кеш-ключ доступа OAuth, используемый в разделе аутентификации. Это странно, потому что я могу вытащить список подписчиков, проверить статистику ставок и т. Д. Также мои обновления NewtonSoft, Hammoch и TweetSharp не были обновлены/изменены.

Спасибо.

[SOURCE]

private struct message 
    { 
     public long id; 
     public string text; 

     public message(long i, string t) 
     { 
      id = i; 
      text = t; 
     } 
    }  

    private MessageEngine 
    { 
     /* Do auth -- excised for obvious reasons */ 

     Timer timer = new Timer(); 
     timer.Interval = 15000; 
     timer.Tick += new EventHandler(timer_Tick); 
     timer.Start(); 
    }  

    private List<message> GetDirectMessages() 
    { 
     try 
     { 
      //Declarations: 
      message message = new message(); 
      List<message> messages = new List<message>(); 
/*line 344*/IEnumerable<TwitterDirectMessage> directMessages = service.ListDirectMessagesReceived(); 

      //Fetch all current direct message: 
      foreach (TwitterDirectMessage directMessage in directMessages) 
      { 
       //Store each message into a list, in reverse older: 
       message = new message(directMessage.Id, directMessage.Text); 
       messages.Insert(0, message); 
      } 

      return messages; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
      return null; 
     } 
    } 

    private void timer_Tick(object sender, EventArgs e) 
    { 
     try 
     { 
      List<message> messages = GetDirectMessages(); 
      LocalExecute(messages); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 

    private bool LocalExecute(List<message> messages) 
    { 
     /* process messages */ 
    } 

[ИСКЛЮЧЕНИЯ]

Newtonsoft.Json.JsonSerializationException: Cannot deserialize JSON array into type 'TweetSharp.TwitterDirectMessage'. 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureArrayContract(Type objectType, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 412 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String reference) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 432 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 222 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueNonProperty(JsonReader reader, Type objectType, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 205 
    at TweetSharp.Serialization.SerializerBase.DeserializeJson(String content, Type type) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\SerializerBase.cs:line 60 
    at TweetSharp.Serialization.JsonSerializer.AddDeserializedItem(String c, Type type, IList collection) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\JsonSerializer.cs:line 131 
    at TweetSharp.Serialization.JsonSerializer.DeserializeCollection[T](String content) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\JsonSerializer.cs:line 90 
    at TweetSharp.Serialization.JsonSerializer.Deserialize[T](String content) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\JsonSerializer.cs:line 17 
    at Hammock.RestClient.DeserializeEntityBody[T](RestBase request, RestResponse`1 response) in C:\Users\Dimebrain\Desktop\Src\hammock\src\net35\Hammock\RestClient.cs:line 2285 
    at Hammock.RestClient.BuildResponseFromResult[T](RestBase request, WebQuery query) in C:\Users\Dimebrain\Desktop\Src\hammock\src\net35\Hammock\RestClient.cs:line 2212 
    at Hammock.RestClient.Request[T](RestRequest request) in C:\Users\Dimebrain\Desktop\Src\hammock\src\net35\Hammock\RestClient.cs:line 107 
    at TweetSharp.TwitterService.WithHammockImpl[T](RestRequest request) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Service\TwitterService.cs:line 401 
    at TweetSharp.TwitterService.WithHammock[T](String path) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Service\TwitterService.cs:line 378 
    at TweetSharp.TwitterService.WithHammock[T](String path, Object[] segments) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Service\TwitterService.cs:line 383 
    at TweetSharp_Test.Form1.GetDirectMessages() in C:\Users\kmarks2\Documents\Visual Studio 2008\Projects\TweetSharp_Test\TweetSharp_Test\Form1.cs:line 344 
+0

Можете ли вы показать нам RAW JSon, что бы немного быть более полезным –

ответ

2

Как я могу видеть из стека проследить TweetSharp.TwitterDirectMessage класс схема отличается от того, что ожидалось от десериализатор, могут быть данные JSon прошли изменился с последнего раза, когда вы проверили.

Также я думаю, что у Tweetsharp была проблема, связанная с этим.

Как я проверил в наборе изменений на codeplex, было исправлено исправление прямых сообщений с идентификаторами с использованием бега.

Проверьте здесь.

http://tweetsharp.codeplex.com/SourceControl/changeset/changes/8bf46a5230bc

Попробуйте загрузить новый TweetSharp v2.0.0.0 - Preview 9

+0

Можете ли вы показать нам RAW JSon, что бы немного быть более полезным в определении точного источника проблемы ... –

+0

Awesome. Это сделал трюк. Все еще странно, что 2-недельные «сломанные» библиотеки, которые я использовал, работали немного. – kmarks2

+1

Thanx ... попробуйте сохранить вашу библиотеку/dll обновлено ... вещи здесь слишком быстро меняются ... ;-) –

Смежные вопросы