当我尝试使用MassTransit 3 在Azure中运行应用程序时,收到以下错误
实体名称或路径不能包含"/"作为前缀或后缀。这个提供的值为"/profile.api"。参数名称:entityName
我能看到前缀添加到队列名称的唯一方法是通过MassTransit。
奇怪的是,队列是在我的Azure门户中以"profile.api"的名称创建的。
其他人以前经历过这种情况吗?我不确定这是MassTransit的错误,还是我在配置中错过了一步。
下面是完整的堆栈。
谢谢。
[ArgumentException:实体名称或路径不能包含"/"作为前缀或后缀。提供的值为"/profile.api"。参数name:entityName]
Microsoft.ServiceBus.Common.AsyncResult.End(IAsyncResult结果)+381Microsoft.ServiceBus.MessagingFactory.EndCreateMessageReceiver(IAsyncResult结果)+70
System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar, Func
2 endFunction,Action1 endAction, Task
1 promise,布尔值requiresSynchronization)+86
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.AzureServiceBusTransport.Pipeline.-Send>d__7.MoveNext()+794 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()+26 MassTransit.AzureServiceBusTransport.Pipeline.-Send>d__7.MoveNext()+2756 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.AzureServiceBusTransport.Pipeline.d_5.MoveNext()+1599 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.AzureServiceBusTransport。<b_0>d.移动下一个()+531System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.Interals.Extensions.d_01.MoveNext() +924 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
1任务工厂,CancellationToken CancellationToken)+222
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 MassTransit.<StartAsync>d__29.MoveNext() +1154
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +26
MassTransit.<StartAsync>d__29.MoveNext() +2025
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 MassTransit.Util.TaskUtil.Await(Func
MassTransit.MassTransitBus.MassTransity.IBusControl.Start()+61
SampleApp.Startup.ConfigureBus()+33
SampleApp.Startup.Configuration(IAppBuilder应用程序)+428
事实证明,与MassTransit测试运行其azure配置的方式相比,我的应用程序的配置方式有一个非常微妙的差异。
而我有(不工作)
public class AzureBusModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register(context =>
{
var busControl = Bus.Factory.CreateUsingAzureServiceBus(sbc =>
{
var host = sbc.Host(new Uri("sb://" + ConfigurationManager.AppSettings["AzureEndPoint"]), h =>
{
h.OperationTimeout = TimeSpan.FromSeconds(5);
h.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
ConfigurationManager.AppSettings["AzureKeyName"],
ConfigurationManager.AppSettings["AzureKeyValue"]);
});
sbc.UseSerilog();
sbc.UseJsonSerializer();
//sbc.UseRetry(Retry.Exponential(10.Seconds(), 3.Minutes(), 10.Seconds()));
sbc.ReceiveEndpoint(host, ConfigurationManager.AppSettings["QueueName"], ep =>
{
ep.LoadFrom(context);
});
});
Log.Information("Finished Configuring MassTransit using Azure");
return busControl;
})
.SingleInstance()
.As<IBusControl>()
.As<IBus>();
}
}
更改以下解决了我的问题
var serviceUri = ServiceBusEnvironment.CreateServiceUri("sb",
ConfigurationManager.AppSettings["AzureEndpoint"],
ConfigurationManager.AppSettings["AzureEndpointName"]);
var host = sbc.Host(serviceUri, h =>
{
// [...]
}
我希望这能帮助其他有类似问题的人。