Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止将计算机名称附加到终结点名称_C#_Sql Server_Asp.net Web Api_Nservicebus_Transport - Fatal编程技术网

C# 防止将计算机名称附加到终结点名称

C# 防止将计算机名称附加到终结点名称,c#,sql-server,asp.net-web-api,nservicebus,transport,C#,Sql Server,Asp.net Web Api,Nservicebus,Transport,我们已经使用NServiceBus开发了大量服务,我们正在从使用MSMQ传输转换为使用SQL Server传输 对于NSB托管的服务,这是相对简单的。但是我们在设置一些网站(asp.NETWebAPI)时遇到了问题 我们通过以下配置在网站内自托管: NServiceBus.Configure.Serialization.Xml(); var bus = NServiceBus.Configure.With(/* specific assemblies */) .Castl

我们已经使用NServiceBus开发了大量服务,我们正在从使用MSMQ传输转换为使用SQL Server传输

对于NSB托管的服务,这是相对简单的。但是我们在设置一些网站(asp.NETWebAPI)时遇到了问题

我们通过以下配置在网站内自托管:

NServiceBus.Configure.Serialization.Xml();
var bus = NServiceBus.Configure.With(/* specific assemblies */)
            .CastleWindsorBuilder(container)
            .DefineEndpointName(
                ConfigurationManager.AppSettings["nsb:EndpointName"])
            .DefiningCommandsAs(t =>
                t.GetCustomAttributes(typeof(/* our marker */), false)
                     .GetLength(0) > 0)
            .DefiningEventsAs(t =>
                t.GetCustomAttributes(typeof(/* our marker */), false)
                     .GetLength(0) > 0)
            .SetEndpointSLA(new TimeSpan(0,10,0))
            .UseNHibernateTimeoutPersister()
            .UseNHibernateSubscriptionPersister()
            .UseTransport<SqlServer>() //<-- Changed here
            .UnicastBus()
            .LoadMessageHandlers()
            //.DoNotCreateQueues()  //We create queues manually.
            .CreateBus()
            ;
而当它创建MSMQ队列时,它会创建:

Service.Name
Service.Name.Retries
Service.Name.Timeouts
Service.Name.TimeoutsDispatcher
事实上,已经更新到SQL Server传输的订阅服务器正在寻找
Service.Name
队列表来注册订阅


我做错了什么,或者需要什么其他信息来解决这个问题?

我在特定的.net谷歌群上发布了这个问题。这是我从约翰·西蒙斯那里得到的解释:

原因是NServiceBus回调使用 一种内存中的字典,用于跟踪传出和传出的消息ID 消息ID进入,换句话说,当您这样做时 Bus.Send().在您的网站中注册(/*callback here*/),我们将添加一个 此内存字典中的项表示我们发送了一条消息 我们还存储回调委托,然后 接收消息时,我们会检查字典,并检查相关性 消息id匹配我们将触发回调委托

所以这意味着如果你扩展你的网站(例如一个网站场) 其中,如果主服务器 这些端点的队列名称与任何这些端点的名称相同 out端点可以拾取假定要发送到 特定的端点/计算机,由于回调 该消息不会在内存字典中退出 端点/机器

全文如下:

菲尔让我想到:

这是故意的。默认情况下,sql/rabbit/active将包括机器名。我们的As_A_服务器覆盖了以下内容:

Configure.ScaleOut(s=>s.SingleBrokerQueue());
原因是默认情况下支持回调


好的,在我们的例子中,我们没有使用回调-我们是发布者,不是客户,因此这正是我们需要的修复。

谢谢。这让我找到了我们需要的解决方法(我们不是使用回调的客户机,我们是发布者)
Configure.ScaleOut(s=>s.SingleBrokerQueue());