异步回调引发异常

时间:2019-10-13 15:31:49

标签: c# autofac nservicebus

尝试使用autofac DI进行NServiceBus时出现以下错误:

InvalidOperationException:IAsyncResult实现“ Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement + ReconnectChannelFactory`1 + RequestSessionChannel + RequestAsyncResult [System.ServiceModel.Channels.IRequestSessionChannel]”尝试多次完成单个操作。这可能是由于IAsyncResult实现的不正确应用或其他可扩展性代码引起的,例如IAsyncResult返回错误的CompletedSynchronously值,或多次调用AsyncCallback。

WebApiConfig:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            try
            {
                var builder = new ContainerBuilder();
                builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
                builder.RegisterType<MessageHandler>().As<IMessageHandler>().InstancePerLifetimeScope();

                var container = builder.Build();

                var bus = CreateBusInstance(container);
                builder.RegisterInstance(bus).As<IBus>().SingleInstance();
                var resolver = new AutofacWebApiDependencyResolver(container);
                config.DependencyResolver = resolver;
            }
            catch(Exception e)
            {
                throw;
            }
        }

        private static IBus CreateBusInstance(ILifetimeScope container)
        {
            var configuration = new BusConfiguration();
            configuration.EndpointName("ServiceBusName");
            configuration.DisableFeature<SecondLevelRetries>();
            configuration.DisableFeature<Sagas>();
            configuration.DisableFeature<TimeoutManager>();
            configuration.ScaleOut().UseSingleBrokerQueue();
            configuration.UsePersistence<AzureStoragePersistence>();
            configuration.UseTransport<AzureServiceBusTransport>().ConnectionString(ConfigurationManager.ConnectionStrings["ServiceBus"].ToString());
            configuration.UseSerialization<XmlSerializer>();
            configuration.UseContainer<AutofacBuilder>(cust => cust.ExistingLifetimeScope(container));
            return Bus.Create(configuration).Start();
        }
    }

MessageHandler:

using nservciebus.Models;
using NServiceBus;

namespace nservciebus.ServiceBusHandler
{
    public class MessageHandler : IMessageHandler
    {
        private readonly IBus _bus;

        public MessageHandler(IBus bus)
        {
            _bus = bus;
        }

        public void Handle(ServiceBusMessage message)
        {
            _bus.Send(message);
        }
    }
}

正在使用的Nuget软件包: -Autofac:3.5.2 -Autofac.Owin:4.0 -Autofac.WebApi2:4.0 -Autofac.WebApi2.Owin:4.0 -NServiceBus:5.2.14 -NServiceBus.Autofac:5.0 -NServiceBus.Azure.transports.WindowsAzureServiceBus:6.4 -NServiceBus.Azure:6.2.3 -WindowsAzure.Storage:4.3 -WindowsAzure.ServiceBus:2.8.2

AnyIdeas是什么原因导致此问题以及如何解决?

谢谢

0 个答案:

没有答案
相关问题