Почему срок действия токена в твиттере истек?
У меня есть твиттер-бот, который использует LinqtoTwitter, он прекрасно работает, но когда я запускаю его после почти 20 ответов (комментариев) других пользователей в Твиттере, токен теряет силу без предупреждения. Я менял интервалы с каждых 5 минут до каждых 10 минут, но токены исчезли, и мне нужно сгенерировать новый токен!!
Это приложение отправляет ссылки на продукты пользователям, основываясь на их твитах, оно работает в Интернете и запускает фоновый поток, поэтому после запуска он работает в фоновом режиме, даже если закрывает веб-страницу. Как я могу решить эту проблему?! И теперь приложение было приостановлено:(не пользователь, хотя! Вот код авторизации:
private static string consumer_Key = ConfigurationManager.AppSettings["consumerkey"];
private static string consumer_Key_Secret = ConfigurationManager.AppSettings["consumersecret"];
private static string access_Token = ConfigurationManager.AppSettings["accessToken"];
private static string access_Token_Secret = ConfigurationManager.AppSettings["accessTokenSecret"];
static SingleUserAuthorizer auth = new SingleUserAuthorizer
{
CredentialStore = new SingleUserInMemoryCredentialStore
{
ConsumerKey = consumer_Key,
ConsumerSecret = consumer_Key_Secret,
AccessToken = access_Token,
AccessTokenSecret = access_Token_Secret,
}
};
1 ответ
Общая проблема с веб-приложениями заключается в том, что веб-сервер (IIS) периодически перезагружается и все учетные данные, хранящиеся в памяти, теряются. Одна из вещей, которую вы можете сделать, это использовать SessionStateCredentialStore
, как это:
static SingleUserAuthorizer auth = new SingleUserAuthorizer
{
CredentialStore = new SessionStateCredentialStore
{
ConsumerKey = consumer_Key,
ConsumerSecret = consumer_Key_Secret,
OAuthToken = access_Token,
OAuthTokenSecret = access_Token_Secret,
}
};
Чтобы преодолеть проблему утилизации, убедитесь, что ваше состояние сеанса установлено на StateService
или же SqlServer
, скорее, чем InProc
,
Другой вариант - убедиться, что у вас все еще есть учетные данные, загруженные перед выполнением операции. CredentialStore
имеет HasAllCredentials
метод, который вы можете использовать, как это.
if (!auth.CredentialStore.HasAllCredentials())
{
auth = new SingleUserAuthorizer
{
CredentialStore = new SingleUserInMemoryCredentialStore
{
ConsumerKey = consumer_Key,
ConsumerSecret = consumer_Key_Secret,
AccessToken = access_Token,
AccessTokenSecret = access_Token_Secret,
}
};
}
Если у вас возникают проблемы с пропускной способностью, когда Twitter отправляет вам ошибки ограничения скорости, рассмотрите ApplicationOnlyAuthorizer
, который дает вам больший предел скорости. Если вы идете с ApplicationOnlyAuthorizer
Мои комментарии к учетным данным выше все еще применяются.
Ты можешь использовать try/catch
блоки, чтобы определить, когда вы превысили ограничение скорости или использовать TwitterContext.RateLimitXxx
свойства для мониторинга каждого запроса, чтобы избежать превышения ограничений.
Если Твиттер отзывает ваши учетные данные, вам нужно решить это с ними. Это проблема между Twitter API и вашим приложением, а не LINQ to Twitter.