Не удалось подключиться к исключительной ситуации, так как подключенная сторона не ответила должным образом по истечении определенного периода времени - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть исходный код, который отправляет сообщение в очередь обслуживания, проблема с его удержанием не удалась из-за времени соединения.В чем может быть причина этого исключения времени соединения?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.ServiceBus;

namespace AzureServiceBusApplication
{
    class Program
    {
        static IQueueClient queueClient;
        static void Main(string[] args)
        {
            string ServiceBusConnectionString = "Endpoint=sb://enstaservicebus.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=*****=";
            string QueueName = "entsaqueuename";

            for(int i = 0; i < args.Length; i++)
            {
                var p = new Program();
                if(args[i] == "--ConnectionString")
                {
                    Console.WriteLine($"ConnectionString:{args[i+1]}");
                    ServiceBusConnectionString = args[i + 1];
                }else if(args[i] == "--QueueName")
                {
                    Console.WriteLine($"QueueName:{args[i+1]}");
                    QueueName = args[i + 1];
                }
            }
            if(ServiceBusConnectionString != "" && QueueName!= "")
            {
                MainAsync(ServiceBusConnectionString, QueueName).GetAwaiter().GetResult();
            }
            else
            {
                Console.WriteLine("Specify - ConnectionString and -QueueName to execute the example");
                Console.ReadKey();
            }
        }

        static async Task MainAsync(string ServiceBusConnectionString, string QueueName)
        {
            const int numberOfMessages = 10;
            queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

            Console.WriteLine("=====================================================");
            Console.WriteLine("Press any key to exit after receiving all the messages");
            Console.WriteLine("=======================================================");


            RegisterOnMessageHandlerAndReceiverMessages();

            await SendMessagesAsync(numberOfMessages);

            Console.ReadKey();
        }

        static void RegisterOnMessageHandlerAndReceiverMessages()
        {
            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceiveHandler)
            {
                MaxConcurrentCalls = 1,

                AutoComplete = false


            };
            queueClient.RegisterMessageHandler(ProcessMessageAsync, messageHandlerOptions);
        }

         static async Task ProcessMessageAsync(Message message, CancellationToken token)
        {
            Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");

            await queueClient.CompleteAsync(message.SystemProperties.LockToken);
        }

         static Task ExceptionReceiveHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
        {
            Console.WriteLine("");
            var context = exceptionReceivedEventArgs.ExceptionReceivedContext;
            Console.WriteLine("Exception context for troubleshooting");
            Console.WriteLine($"- Endpoint:{context.Endpoint}");
            Console.WriteLine($"- Entitypoint:{context.EntityPath}");
            Console.WriteLine($"- Executing Action:{context.Action}");
            return Task.CompletedTask;
        }

        static async Task SendMessagesAsync(int numberOfMessagesToSend)
        {
            try
            {
                for(var i = 0; i < numberOfMessagesToSend; i++)
                {
                    string messageBody = $"Message{i}";
                    var message = new Message(Encoding.UTF8.GetBytes(messageBody));

                    Console.WriteLine($"Sending message:{messageBody}");

                    await queueClient.SendAsync(message);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine($"{DateTime.Now}:: Exception:{exception.Message}");
            }
        }
    }
}

Пожалуйста, помогите моей команде, так как я застрял в том, где именно происходит исключение, и я выполнил поиск неисправностей.Но в SendMessageAsycn после исключения catch он выбрасывает их из тела. Нужно ли deviceExplore для проверки отправки этого сообщения?.

...