私のシナリオ:各インスタンスがメッセージをリッスンするために各インスタンスがService Busトピックへのサブスクリプションを作成する、クラウドでホストされているWebサイト。
私の質問:プログラムでサブスクリプションを作成するにはどうすればよいですか?
...
問題:古いWindowsAzureライブラリを使用することに慣れています。現在、古いライブラリをサポートしていない.NET Standardを使用しています
解決策:Microsoft.Azure.ServiceBus NuGetパッケージを使用する
...
問題:管理機能(サブスクリプションの作成など)をサポートしていません
解決策:NuGetライブラリMicrosoft.Azure.Management.ServiceBusも使用する
...
問題:Azureポータルから提供された接続文字列またはキーの使用をサポートしていません
解決策: https://github.com/Azure-Samples/service-bus-dotnet-management は、使用する一般的なプログラミングパターンを提供します。
...
問題:WTFはそれが話している{tenantId}ですか?
解決策:よくわかりましたが、 "Azure Active Directory"-> "Properties"にあり、期待どおり、tenantIdの代わりに "Directory ID"というラベルが付いています。
...
問題:WTFは{clientId}および{clientSecret}ですか?
解決策:さらに簡単です。あなたがしなければならないことはその情報から明らかです:
...
では、例のステップ1は機能しますか? AcquireTokenAsyncがアクセストークンを返します! YAYYYYYYYYYYYYYY
result.AccessTokenは、ステップ2で参照される「トークン」です。
ステップ2、3 ...問題ありません...ステップ4に進みます。代わりにsbClient.Subscriptions.CreateOrUpdateを使用します
{resourceGroupName}はとても簡単に思えます-ポータルの「リソースグループ」からコピーしてください
...
問題:{namespaceName}とは何ですか?
Service Busの名前ですか? {name} .servicebus.windows.net?または、名前空間は{name.servicebus.windows.net}のような完全なものですか?それとも{sb://name.servicebus.windows.net}のようなスキームが含まれていますか?
...
問題:ここで何を試しても、CreateOrUpdate呼び出しで「操作が無効なステータスコード 'NotFound'を返しました」と表示されます。
そして、それが私が行き詰まっているところです。どこが間違っているのですか?
補足として、スナークは私の欲求不満を反映しています-「単純なはずのことをするためだけに何も知りたくないAzureテクノロジの大規模なスタックを学ぶ必要があるように本当に感じます」私がうさぎの穴に吸い込まれているように。
[編集#1]-「SubscriptionId」は、サービスバスのサブスクリプションではなく、ポータルの請求セクションにあるAzureサブスクリプションIDであることがわかります。
[編集#2]-「namespaceName」には.servicebus.windows.netは含まれません-名前自体のみ
そして、これらの変化により、数え切れないほどの時間の研究の後、IT WORKS
Microsoft.Azure.ServiceBus.3.1.0では、ConnectionStringを使用してManagementClientを作成できます。
private async Task CreateTopicSubscriptions()
{
var client = new ManagementClient(ServiceBusConnectionString);
for (int i = 0; i < Subscriptions.Length; i++)
{
if (!await client.SubscriptionExistsAsync(TopicName, Subscriptions[i]))
{
await client.CreateSubscriptionAsync(new SubscriptionDescription(TopicName, Subscriptions[i]));
}
}
}
新しいAzure Service Busクライアントの当初の計画は、管理プレーンをまったく含まず、代わりにAzure Active Directoryルートを使用することでした。あなたが指摘したように、これは問題が多すぎることが証明されています。 Microsoftメッセージングチームは、基本的な操作を示すために sample をまとめました。
.NET Core 2.0で動作させるために 保留中のPR があることに注意してください
今後、開発者は、Azure Active Directoryオプションを使用するのと同じように、接続文字列を使用してService Bassにアクセスすることを好みます。 管理操作の問題 要求を追跡するために発生します。 最新計画 は、.NET Standardクライアントに軽量の管理ライブラリを提供することです。
現時点では、古いクライアントを利用してエンティティを作成するか、管理パッケージが利用可能になるまでMicrosoft.Azure.Management.ServiceBus(またはFluent)を使用するかのいずれかを選択できます。
更新
管理操作は、クライアントの3.1.0バージョンの一部としてリリースされました。