我有一个使用LinqtoTwitter的Twitter机器人,它运行得很好但是当我在其他用户推文上几乎20个回复(评论)后启动它时,令牌过期而没有任何警告。我将间隔时间从每5分钟更改为每10分钟,令牌仍然消失,我需要生成新的令牌!!
此应用根据用户的推文向用户发送产品链接并运行后台线程,因此一旦运行,即使关闭网页,它也会在后台运行 我该如何解决这个问题?!现在该应用程序被暂停:(不是用户tho! 这是授权码:
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,
}
};
答案 0 :(得分:0)
Web应用程序的一个常见问题是Web服务器(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撤销您的凭据,您需要与他们解决此问题。这是Twitter API与您的应用程序之间的问题,而不是LINQ to Twitter。