Исключение тайм-аута служебной шины Azure с NancyFX

У меня есть NancyFX API, и при попадании в одну из конечных точек мне нужно запустить более длительную асинхронную задачу, которая отделена от самой конечной точки. Итак, я пытаюсь использовать очередь Azure Service Bus.

Я успешно записываю сообщение в очередь при попадании в конечную точку NancyFX. Я также могу успешно подписаться и читать из очереди из чего-то другого, кроме NancyFX (я тестировал с Linqpad).

Однако, если я пытаюсь подписаться из приложения NancyFX, я получаю исключение тайм-аута в течение секунды или двух после запуска приложения. Я делаю это в другом потоке, который запускается переопределением NancyFX Bootstrapper.ApplicationStartup.

Я не уверен, почему это было бы иначе, чем в приложении NancyFX. Я не вижу ничего подходящего в файле web.config.

Ниже приведен код, который я использую для подписки на очередь ...

var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("Main", AccessKey);
var factory = await MessagingFactory.CreateAsync("sb://myapp.servicebus.windows.net", tokenProvider);
var receiver = await factory.CreateMessageReceiverAsync("MyQueue");

receiver.OnMessage(bm =>
{
    // Do something here
}, new OnMessageOptions
{
    MaxConcurrentCalls = 1,
});

Ниже - исключение ...

System.ServiceModel.FaultException`1 [System.ServiceModel.ExceptionDetail]: во время операции истекло время ожидания. b6b8e25a-714f-4f55-8a79-91e390f47a96_G25 (Сведения об ошибке равны An ExceptionDetail, вероятно, созданному IncludeExceptionDetailInFaults = true, значение которого: System.TimeoutException: во время операции истекло время ожидания.).

А вот стек вызовов, когда я его поймал в отладчике ...

Исключение, которое вы получили, - это указание на то, что клиент не может пройти через шлюз ASB, чтобы поговорить с серверной частью. Вы можете использовать предоставленный идентификатор отслеживания (NancyFX), чтобы открыть запрос в службу поддержки. Если это исключение сохраняется, попробуйте другое пространство имен, чтобы убедиться, что это не исключает его.


person Dan    schedule 29.08.2016    source источник
comment
@SeanFeldman Да, конечно :) И спасибо за ваш ответ ниже - я не понял, что это идентификатор отслеживания :)   -  person Sean Feldman    schedule 30.08.2016
comment
Microsoft.ServiceBus.dll! Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.ThrowIfFaultMessage (System.ServiceModel.Channels.Message wcfMessage) Строка 463 C # Microsoft.ServiceBus.dll! Microsoft.ServiceModel.Channels.Message wcfMessage. HandleMessageReceived (результат System.IAsyncResult) Строка 313 C # Microsoft.ServiceBus.dll! Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.OnMessageReceived (System.IAsyncResult result) Line 381 C # System.ServiceBus.dll! AsyncResult.Complete (bool completedSynchronously) Неизвестный System.ServiceModel.dll! System.ServiceModel.Channels.TransportDuplexSessionChannel.TryReceiveAsyncResult.OnReceive (Результат System.IAsyncResult) Неизвестный System.ServiceModel.AsyncResult. System.IAsyncResult результат) Неизвестно System.ServiceModel.Interna ls.dll! System.Runtime.AsyncResult.Complete (bool completedSynchronously) Неизвестно System.ServiceModel.dll! System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete (состояние объекта) Неизвестно System.ServiceModel.dll! SessionConnectionReader.OnAsyncReadComplete (состояние объекта) Неизвестно System.ServiceModel.Internals.dll! System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame (результат System.IAsyncResult) Неизвестный System.dll! System.Net.LazyAsyncResultIntpleter (System.Net.LazyAsyncResultIntpleter) (System.Net.LazyAsyncResultI System.dll! System.Net.LazyAsyncResult.ProtectedInvokeCallback (результат объекта, System.IntPtr userToken) Неизвестный System.dll! System.Net.Security._SslStream.ProcessFrameBody (int readBytes, byte [] buffer, int offset, int count, System .Net.AsyncProtocolRequest asyncRequest) Неизвестный System.dll! System.Net.Security._SslStream.ReadFrameCallback (System.Net.AsyncProtocolRequest asyncRequest) Неизвестный System.dll! System.Net.AsyncProtocolRequest.CompleteRequest (int result) Неизвестный System.dll! System.Net.FixedSizeReader.CheckCompletionBeforeNextRead (int bytes) Неизвестный System.dll! Internals.dll! System.Runtime.AsyncResult.Complete (bool completedSynchronously) Неизвестно System.ServiceModel.dll! System.ServiceModel.Channels.ConnectionStream.IOAsyncResult.OnAsyncIOComplete (состояние объекта) Неизвестно System.dll! System.Net.Sockets.SocketAsyncEventArgs.OnCompleted (System.Net.Sockets.SocketAsyncEventArgs e) Неизвестный System.dll! System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess (System.Net.Sockets.SocketError socketNetError, int bytes Sockets.SocketFlags флаги) Неизвестный System.dll! System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback (uint errorCode, uint numBytes, System.Threading.NativeOverlapped * nativeOverlapped) Неизвестный mscorlib.dll! uint numBytes, System.Threading.NativeOverlapped * pOVERLAP) Неизвестно [переход от собственного к управляемому]   -  person Dan    schedule 30.08.2016


Ответы (1)


Как только вы решите проблему с помощью поддержки MSFT, было бы неплохо обновить вопрос, добавив решение, которое они предоставят по адресу social.msdn.microsoft.com/Forums/en-US/

person Sean Feldman    schedule 29.08.2016