尝试使用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是什么原因导致此问题以及如何解决?
谢谢