У меня есть 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
), чтобы открыть запрос в службу поддержки. Если это исключение сохраняется, попробуйте другое пространство имен, чтобы убедиться, что это не исключает его.