如何在Asp.net Web API中重新配置基于SQLTransport的NServicebus?

约吉拉吉

我在ASP.net Web API项目中使用带有SQLTransport的NServicebus(版本4.6.3)。对于不同环境(Dev,QA等)的队列,我具有不同的连接字符串。我的配置如下所示:

public class BusConfigurator
{
    public static IStartableBus Bus { get; private set; }

    public static void DisposeBus()
    {
        if (Bus == null) 
            return;

        Bus.Shutdown();
        Bus.Dispose();
        Bus = null;
    }
    public static void InitializeServiceBus(string connectionString)
    {

        var configure = Configure.With()
            .DefineEndpointName("MyEndPoint")
            .Log4Net(new DebugAppender { Threshold = Level.Warn })
            .UseTransport<SqlServer>(connectionString)
            .PurgeOnStartup(false)
            .SetDefaultTransactionLevel()
            .UnicastBus(); // Error is thrown here on second call

        configure.MyCustomSQLServerPersistence();            

        Bus = configure.CreateBus();


    }

    public static void StartBus()
    {
        Bus.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
    }

} 

我在应用程序中有一个下拉菜单,以便用户可以选择环境。根据选择,我想重新配置总线。因此,我调用DisposeBus,然后将连接字符串传递给InstartizeServiceBus方法,再传递给startBus。它第一次工作,但是当使用不同的连接字符串再次调用它时,会在下面抛出错误:

无法设置键的值:NServiceBus.Transport.ConnectionString。设置已被锁定以进行修改。请更早地在配置管道中移动任何配置代码Source = NServiceBus.Core Line = 0 BareMessage =无法设置以下项的值:NServiceBus.Transport.ConnectionString。设置已被锁定以进行修改。请在配置管道中更早地移动任何配置代码

是否打算以这种方式使用/配置NServicebus?(我猜可能不是)如果没有,那么是否有解决方法/不同的方法?

戴维·博克

在V4或更低版本中,无法通过正常的人工方式来做到这一点。每个AppDomain仅有一辆公交车。所有的配置API都是静态的,因此,如果您尝试使用该API,则完全可以解决遇到的问题。

通过“人为手段”,我的意思是可能有可能做一些疯狂的事情,包括在过程中旋转一个新的AppDomain,在其中建立Bus,然后在完成后将其拆除。有可能。我还没试过 我不推荐它。

在V5中,完全重新设计了配置API,它不是静态的,因此这是可能的:

var cfg = new BusConfiguration();

// Set up all the settings with the new V5 Configuration API

using (var justOneBus = NServiceBus.Bus.Create(cfg).Start())
{
    // Use justOneBus, then it gets disposed when done.
}

这是正确的。它是一次性的。然后,您可以再次执行此操作。在您的情况下,您不想将其放在一个using块中-您希望将其设置在某个位置,并且当下拉菜单切换时,请在当前实例上调用Dispose并使用新参数对其进行重建。

但是请记住,该总线的创建成本仍然很高。您仍然仍然要将其视为应用程序范围内的单例(或类似单例)实例。您绝对不希望每个Web请求单独启动一个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET Web API中接收JSON?

来自分类Dev

如何在ASP.NET Web API上获取对象?

来自分类Dev

ASP.NET Web API中基于角色的授权-如何在主体上设置角色?

来自分类Dev

如何在ASP.NET Core Web API中配置JSON格式缩进

来自分类Dev

如何在IIS中为OWIN配置ASP.NET Web API 2?

来自分类Dev

如何在经典 asp 中使用 asp.net web api?

来自分类Dev

我如何在 asp.net web api 项目而不是 .net core 上使用 DI

来自分类Dev

如何在VS.NET 2012中的ASP.NET Web表单中使用jQuery文件?

来自分类Dev

如何在ASP.NET Web API内存测试中添加客户端证书?

来自分类Dev

如何在Asp.net Web Api 2中使用多种Put和Post方法

来自分类Dev

如何在新的ASP.NET Core中调用Web API非默认构造函数

来自分类Dev

如何在ASP.NET Web API中获取依赖关系解析器的实例

来自分类Dev

如何在ASP.NET Web API中接受ISO日期格式

来自分类Dev

如何在此asp.NET Web API方法中检索Ajax标头?

来自分类Dev

如何在ASP.NET Web API中执行异步“解雇”操作

来自分类Dev

如何在ASP.NET Core Web Api中完成版本控制

来自分类Dev

如何在ASP.NET Web Api服务中不引发异常?

来自分类Dev

如何在ASP.Net 5 Web API中启用OData

来自分类Dev

如何在OData asp.net Web API中创建注册用户操作

来自分类Dev

如何在ASP.NET MVC4中为Web API网址创建通用方法

来自分类Dev

如何在ASP.NET Web API异步控制器方法中返回对象列表

来自分类Dev

如何在ASP.NET Web API 5.2.3中使用FromForm属性

来自分类Dev

如何在ASP.NET Framework Web API中返回自定义JSON对象?

来自分类Dev

如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger

来自分类Dev

如何在http 404 ASP.NET Web API中返回自定义Json

来自分类Dev

如何在ASP.NET Web API中获取GET参数?

来自分类Dev

如何在OData asp.net Web API中创建注册用户操作

来自分类Dev

如何在ASP.NET Web API 2中具有可选的请求模型属性?

来自分类Dev

如何在Asp.net Web Api 2中使用多种Put和Post方法

Related 相关文章

  1. 1

    如何在ASP.NET Web API中接收JSON?

  2. 2

    如何在ASP.NET Web API上获取对象?

  3. 3

    ASP.NET Web API中基于角色的授权-如何在主体上设置角色?

  4. 4

    如何在ASP.NET Core Web API中配置JSON格式缩进

  5. 5

    如何在IIS中为OWIN配置ASP.NET Web API 2?

  6. 6

    如何在经典 asp 中使用 asp.net web api?

  7. 7

    我如何在 asp.net web api 项目而不是 .net core 上使用 DI

  8. 8

    如何在VS.NET 2012中的ASP.NET Web表单中使用jQuery文件?

  9. 9

    如何在ASP.NET Web API内存测试中添加客户端证书?

  10. 10

    如何在Asp.net Web Api 2中使用多种Put和Post方法

  11. 11

    如何在新的ASP.NET Core中调用Web API非默认构造函数

  12. 12

    如何在ASP.NET Web API中获取依赖关系解析器的实例

  13. 13

    如何在ASP.NET Web API中接受ISO日期格式

  14. 14

    如何在此asp.NET Web API方法中检索Ajax标头?

  15. 15

    如何在ASP.NET Web API中执行异步“解雇”操作

  16. 16

    如何在ASP.NET Core Web Api中完成版本控制

  17. 17

    如何在ASP.NET Web Api服务中不引发异常?

  18. 18

    如何在ASP.Net 5 Web API中启用OData

  19. 19

    如何在OData asp.net Web API中创建注册用户操作

  20. 20

    如何在ASP.NET MVC4中为Web API网址创建通用方法

  21. 21

    如何在ASP.NET Web API异步控制器方法中返回对象列表

  22. 22

    如何在ASP.NET Web API 5.2.3中使用FromForm属性

  23. 23

    如何在ASP.NET Framework Web API中返回自定义JSON对象?

  24. 24

    如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger

  25. 25

    如何在http 404 ASP.NET Web API中返回自定义Json

  26. 26

    如何在ASP.NET Web API中获取GET参数?

  27. 27

    如何在OData asp.net Web API中创建注册用户操作

  28. 28

    如何在ASP.NET Web API 2中具有可选的请求模型属性?

  29. 29

    如何在Asp.net Web Api 2中使用多种Put和Post方法

热门标签

归档