2

Azure Service Bus Relay アドレスと webHttpRelayBinding を使用して WCF サービスを開始しようとすると、AddressAlreadyInUseException が発生します。

ここで例を使用しています: https://code.msdn.microsoft.com/Relayed-Messaging-Bindings-a6477ba0

次のコードで Relay を作成しない限り、サンプルは正しく動作しません。

string connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"];
var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

var tRelayExists = namespaceManager.RelayExistsAsync("Image");
if (!tRelayExists.Result)
{
    var t = namespaceManager.CreateRelayAsync(new RelayDescription("Image", RelayType.Http));
    Task.WaitAll(t);
    RelayDescription result = t.Result;
}

Program.Main() で他の作業を行う前に、それを行う前に、Azure Service Bus nuget パッケージを追加する必要があります。次に、Microsoft.ServiceBus.ConnectionString という名前の appSettings の下にある App.config の ConnectionString を Azure 資格情報で更新する必要があります。

TCPViewer を使用して、使用中のポートを確認し、競合がないことを確認しました。実際のプロジェクトでは、webHttpRelayBinding と netTcpRelayBinding を試しました。最終的には、DuplexChannels を使用できるように netTcpRelayBinding を使用したいと考えています。

問題の原因について何か考えはありますか? 文書化されていない構成手順が欠落していませんか? どのチュートリアルでもこれは単純に見えますが、各チュートリアルにはいくつかの重要な手順が欠けていることがわかりました。ですから、私たちが見逃したステップがさらにあっても驚かないでしょう。

4

2 に答える 2

3

NamespaceManager で作成されたサービス バス エンティティの場合、バインディング IsDynamic プロパティを false に設定する必要があることがわかりました。これにより、AddressAlreadyInUseException が停止します。

    var binding = new NetTcpRelayBinding();
    binding.IsDynamic = false;

ここで答えを見つけました: http://www.codit.eu/blog/2014/12/securing-azure-service-bus-relay-endpoints-with-sharedaccesssignatures/

于 2015-02-26T21:21:02.577 に答える
2

ここでの解決策は簡単です。NamespaceManager を使用してリレーを作成すると、AddressAlreadyInUseException が発生します。それが、リレーに関連する場所に NamespaceManager が文書化されていない理由だと思います。

名前空間がクラウドで作成され、資格情報が正しく設定されている限り、このサンプルは問題なく機能します。私の場合、SharedSecret ではなく SharedAccessSignature を使用する必要がありました。過去 3 日間に見つけたサンプルはすべて、先週の金曜日頃まで SharedSecret を使用していました。

WCF サービスがホストされると、名前空間にリレー パスが自動的に作成されます。すでに存在するために作成できない場合は、AddressAlreadyInUseException が発生します。あなたの信用が良い限り、すべてが幸せです。

于 2014-10-21T19:58:22.727 に答える