0

我有一个使用 LinqtoTwitter 的 twitter 机器人,它工作得非常好,但是当我在其他用户推文的近 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,
        }
    };
4

1 回答 1

0

Web 应用程序的一个常见问题是 Web 服务器 (IIS) 偶尔会回收,并且内存中保存的任何凭据都会丢失。您可以做的一件事是使用 a SessionStateCredentialStore,如下所示:

static SingleUserAuthorizer auth = new SingleUserAuthorizer
{
    CredentialStore = new SessionStateCredentialStore
    {
        ConsumerKey = consumer_Key,
        ConsumerSecret = consumer_Key_Secret,
        OAuthToken = access_Token,
        OAuthTokenSecret = access_Token_Secret,
    }
};

要克服回收问题,请确保您的会话状态设置为StateServiceor 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。

于 2018-06-17T22:55:48.733 回答