2

私はこのチュートリアルに従っていますが、呼び出し中に例外が発生し続けQueueClient.Send()ます。

まず、App.Config での接続文字列の設定を次に示します ({computername} を実際のマシン名に置き換えます)。

<add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://{computername}/ServiceBusDefaultNamespace;StsEndpoint=https://{computername}:9355/ServiceBusDefaultNamespace;RuntimePort=9354;ManagementPort=9355" />

私が実行しているコードは次のとおりです。

NamespaceManager namespaceManager = NamespaceManager.Create();

TokenProvider nameSpaceManagerTokenProvider = TokenProvider.CreateWindowsTokenProvider(
    new List<Uri>() { namespaceManager.Address }, new NetworkCredential(user, password));

TokenProvider messagingToken = TokenProvider.CreateWindowsTokenProvider(
    new List<Uri>() { namespaceManager.Address }, new NetworkCredential(user, password));

namespaceManager.Settings.TokenProvider = nameSpaceManagerTokenProvider;

MessagingFactorySettings messageFactorySettings = new MessagingFactorySettings {TokenProvider = messagingToken};

MessagingFactory messagingFactory = MessagingFactory.Create(namespaceManager.Address, messageFactorySettings);

if (namespaceManager.QueueExists(QueueName))
{
    namespaceManager.DeleteQueue(QueueName);
}

QueueDescription qd = new QueueDescription(QueueName);

namespaceManager.CreateQueue(qd);

QueueClient myQueueClient = messagingFactory.CreateQueueClient(QueueName);

BrokeredMessage sendMessage = new BrokeredMessage("Hello, World!");

myQueueClient.Send(sendMessage); // <---- This is where I'm getting the exception

キューは問題なく削除/作成されます。メソッドを呼び出すと.Send()、次のエラーが表示されます。

Microsoft.ServiceBus.Messaging.MessagingCommunicationException

「ソケット接続が中止されました。これは、メッセージの処理中にエラーが発生したか、リモート ホストが受信タイムアウトを超過したか、基になるネットワーク リソースの問題が原因である可能性があります。ローカル ソケットのタイムアウトは '00:00:59.9579976' でした。」

内部例外は単に「既存の接続がリモート ホストによって強制的に閉じられました」です。

スタック トレースは次のとおりです。

   at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.EndSendCommand(IAsyncResult result)
   at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.OnEndSend(IAsyncResult result)
   at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.OnSend(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout)
   at Microsoft.ServiceBus.Messaging.MessageSender.Send(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout)
   at Microsoft.ServiceBus.Messaging.MessageSender.Send(BrokeredMessage message)
   at Microsoft.ServiceBus.Messaging.QueueClient.Send(BrokeredMessage message)
   at SBDemo.Program.Main(String[] args) in c:\Users\hartez\Documents\bitbucket\SBDemo\SBDemo\Program.cs:line 51
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

現在、クライアント コードとサービス バスの両方を Windows 7 64 ビット dev ボックスで実行しています。私はもともと 2012 Server マシンで Service Bus を実行していましたが、同じ問題がありました。

問題は とWindowsTokenProviderの両方で発生しOauthTokenProviderます。ユーザー アカウントは管理者です (これが単なるアクセス許可の問題であることを願っています)。それは役に立たないようです。Windowsファイアウォールを無効にしてこれも試しましたが、それも役に立ちませんでした.

イベント ビューアーで分析ログとデバッグ ログを有効にしましたが、これらのログに問題の原因を示唆するものは何も表示されません。

何が間違っているのか、またはこれをデバッグする他の方法について何か提案があれば、とても感謝しています。

4

2 に答える 2

1

最後にこれを理解し、これをここに置いて、同じボートに乗っている他の誰もがこの問題と格闘するのを避けることができるようにします:

どうやら、問題は例の MessagingFactory の使用のどこかにあるようです。それが何のためにあるのかはよくわかりませんが (おそらく、Service Bus ではまだサポートされていない AMQP などを処理するためでしょうか?)、必要ありません。QueueClient.Create() を使用してクライアントを作成できます。コードを次のように修正したところ、問題なく動作するようになりました。

NamespaceManager namespaceManager = NamespaceManager.Create();

TokenProvider nameSpaceManagerTokenProvider = TokenProvider.CreateWindowsTokenProvider(
    new List<Uri>() { namespaceManager.Address }, new NetworkCredential(user, password));

namespaceManager.Settings.TokenProvider = nameSpaceManagerTokenProvider;

if (namespaceManager.QueueExists(QueueName))
{
    namespaceManager.DeleteQueue(QueueName);
}

QueueDescription qd = new QueueDescription(QueueName);

namespaceManager.CreateQueue(qd);

QueueClient myQueueClient = QueueClient.Create(QueueName);

BrokeredMessage sendMessage = new BrokeredMessage("Hello, World!");

myQueueClient.Send(sendMessage);
于 2013-03-30T19:00:04.117 に答える