2017-12-07 5 views
0

Mac用Visual Studioを使用してXamarinを使用してアプリケーションを開発しています。 私はiOSとAndroidの両方を対象にC#を書いています。AndroidからのCosmosDBを使用した待ち時間のタイムアウトXamarin

Microsoft AzureでもCosmosDBを使用しています。

問題は、AndroidがCosmosDBにアクセスしようとするときに発生します。私はCosmos用のMongo APIを使用しています。

タイムアウトが CompositeServerSelector {セレクタ= ReadPreferenceServerSelectorを使用してサーバを選択30000ms後に発生した{ ReadPreference = {モード:次のよう

Iは、Androidで得るエラーメッセージであるプライマリ}}、LatencyLimitingServerSelector { AllowedLatencyRange = 00:00:00.0150000}}。クラスタ のクライアントビューは{ClusterId: "2"、ConnectionMode: "ReplicaSet"、タイプ: "ReplicaSet"、状態: "Disconnected"、サーバー:[{ServerId:{ ClusterId:2、EndPoint: "不明/ aspire-cosmosdb.documents.azure.com:10255 "}"、エンドポイント: "未指定/ aspire-cosmosdb.documents.azure.com:10255"、状態: "切断"、タイプ: "不明"}] }。

これは私のコードです:

using System; 
using System.Diagnostics; 
using System.Threading.Tasks; 
using MongoDB.Driver; 

string dsn = "mongodb://myusername:[email protected]nts.azure.com:10255/?ssl=true&replicaSet=globaldb"; 
string databaseName = "mydatabasename"; 

Debug.WriteLine("Initializing Cosmos DB!"); 
MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(dsn)); 
settings.SslSettings = new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 }; 
var mongoClient = new MongoClient(settings); 
var db = mongoClient.GetDatabase(databaseName); 

var databases = (await mongoClient.ListDatabasesAsync()).ToList(); 
foreach (var d in databases) 
{ 
    Debug.WriteLine(d.AsBsonDocument); 
} 

これはxamarin.ios 100%正常に動作します。毎回接続します。このコードは、Azure PortalのCosmosDBクイックスタートからコピー&ペーストしています。私はまた、このコードを取って、C#のコンソールアプリに入れて、それも動作します。しかし、同じコードはAndroidでは動作しません。どうして?

私はAndroidのシミュレータと実際のAndroidデバイスの両方でこれを試しましたが、両方の時間でこの30秒のタイムアウトが発生します。私はAndroidのインターネット許可も有効にしましたが、喜びはありません。助けてください! - 2.4.4

  • MongoDB.Bson

    • MongoDB.Driver -2.4.4
    • MongoDB.Driver.Core:私は執筆時点でNuget経由で最新のパッケージを参照してきた

      - 2.4.4

    注:私はdsnから個人情報を難読化していますが、それはあなたにその大まかな形式を示す必要があります。実際のdsnはAzureポータルからのcosmosdb dsn接続文字列の直接コピー&ペーストです。

  • +0

    次に、ドライバを2.4.4から最新のバージョンに更新しました。それでもなお同じ問題が残っている。 –

    答えて

    0

    大丈夫です。ヘッドバンギングが大量に行われた後、解決策はかなり簡単です。

    CosmosDBはTLS 1.2のみをサポートしています。

    あなたのDroidプロジェクト設定(プロジェクト>オプションを右クリック)に行き、Androidビルド> SSL/TLS実装に進みます。

    マインは「デフォルト」に設定されていました。私は、TLS 1.2をサポートしていない執筆時の「デフォルト」と思います。とにかくMac用のXamarinではない。これはかなりの問題です。ネイティブTLS 1.2以上に切り替え、魔法のように動作します! Android経由でCosmosDBに接続できるようになりました。

    enter image description here

    +0

    私は、CosmosDBがAzureポータルでこの問題を少しはっきりと公開できると感じました。何らかの理由で、Xamarin Droidプロジェクトはデフォルトでは使用されません。 –

    関連する問題