1

私はXamarin Forms + DocumentDBで作成されたアプリケーションの重大なバグを解決しようとしています。私はMicrosoft.Azure.DocumentDB.Coreというパッケージを使ってデータを保存しています。 Azureアカウントはブラジル南部(GMT-3)でホストされており、アプリは正常に動作します。しかし、ロケール時間GMT-4の地区では、上記の例外を除いてアプリケーションがクラッシュすることがあります。DocumentDB + Xamarin - 許可トークンが無効です

The authorization token is not valid at the current time. Please 
create another token and retry (token start time: Mon, 27 Mar 2017 
00:07:41 GMT, token expiry time: Mon, 27 Mar 2017 00:22:41 GMT, 
current server time: Mon, 27 Mar 2017 01:08:24 GMT). 
ActivityId: 81487924-68ee-4329-bb61-02f88ea7b6ec 

GMT-4を取得するためにデバイスを1時間遅らせ、アプリを実行すると例外が表示されます。

//---------------------------------------------static Repository initialize 
    DocumentClient client; 
    const string collectionId = "user"; 
    Uri uri = UriFactory.CreateDocumentCollectionUri(Constants.DB_ID, collectionId); 

    //---------------------------------------------static constructor 
    UserDataService() 
    { 
     client = new DocumentClient(
       new Uri(Constants.DB_ACCOUNT_URL), 
         Constants.DB_ACCOUNT_KEY); 
    } 

    async public Task<User> GetUserByCPF(string cpf) 
    { 
     var fedOpt = new FeedOptions { MaxItemCount = -1 }; 
     var query = client.CreateDocumentQuery<User>(uri, fedOpt) 
          .Where(x => x.Id == _id) 
          .AsDocumentQuery(); 

     var lst = new List<User>(); 
     while (query.HasMoreResults) 
     { 
      lst.AddRange(await query.ExecuteNextAsync<User>()); 
     } 

     return lst.FirstOrDefault(); 
    } 

query.ExecuteNextAsyncの例外が発生します。

エラーメッセージに別のトークンを作成すると表示されますが、マスターキーを使用しています。誰かがマスターキーへのトークンの作成方法や有効期限を増やす方法を知っていますか?

+0

私の知る限りでは、デフォルトでは、リソーストークンの有効期間は1時間です。それを上書きして最大5時間まで増やすことができます。 このURLを参照してください: https://docs.microsoft.com/en-us/rest/api/documentdb/permissions このスタックオーバーフロースレッド、 http://stackoverflow.com/questions/41761552/how-文書ベースのdb-rest-apiリソーストークンの延長を –

+0

こんにちは@SaadMehmoodが助けてくれてありがとう。私はマスターキーのトークンを作成するこのアプローチを試みたが、アプリはまだクラッシュします。 – Leandro

+0

私はトムと同じ行に沿って考えています。すでにトークンを持っているが、時間を変更したときにエラーが発生したと仮定します。残念ながら、彼らはまだソースを公開していないので、私は彼らがトークンをどのように格納するか見るために掘り下げることはできません。 https://github.com/Azure/azure-documentdb-dotnet/tree/master/sdk –

答えて

1

私の経験上、文字列の日付部分はUTC日付で、SDKでトークンを生成しています。そして私は私の側でdifferen zoneで問題を再現することはできません。私が例外を得る唯一の方法は、ローカルデバイスシステムが間違っているということです。

enter image description here

だから私は、例外が間違った時間を使用して、デバイスによって引き起こされていることを前提としています。

+0

こんにちはTom!本当に例外は、デバイスの時刻が間違っている場合にのみ表示されます。私は日付/時刻の対応を提案するユーザーにフレンドリーなメッセージを表示する例外を処理しましたが、私にとっては、トークンを作成するプロセスがどのようになっているかについてのミステリーです。真ん中にサーバーがないので、Azureで接続しているSDK SDKが自分のデバイスが1時間遅れていることをどのように知っていますか?しかし、どちらの方法でも、助けてくれてありがとう – Leandro

+0

SDKは、デバイスの現地時間を取得し、UTC時間に変換する必要があります([UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time)は、一般的に使用される協定世界時標準です世界中で)トークンを生成します。 –

関連する問題