0

我正在向分布式系统发送消息。因此我更喜欢使用网关。问题是我正在动态获取站点密钥、地址和频道类型信息。Nservicebus 检查 app.config 中的站点密钥和相应地址。但是我的 app.config 中没有任何内容。我想从代码中动态修改 app.config。这是正确的方法吗?或者有任何方法可以做到这一点。

下面是代码。

应用程序配置

<GatewayConfig>
    <Sites>
      <Site Key="RemoteSite" Address="http://localhost:25899/RemoteSite/" ChannelType="Http" />
    </Sites>
    <Channels>
      <Channel Address="http://localhost:25899/Headquarters/" ChannelType="Http" />
    </Channels>
  </GatewayConfig>

代码

          string[] siteKeys =
            {
                "RemoteSite"
            };
            PriceUpdated priceUpdated = new PriceUpdated
            {
                ProductId = 2,
                NewPrice = 100.0,
                ValidFrom = DateTime.Today,
            };
            bus.SendToSites(siteKeys, priceUpdated);
4

2 回答 2

1

GatewayConfig您可以在启动期间通过继承自创建对象来动态执行此操作,IProvideConfiguration<GatewayConfig>如以下示例所示。

如果有新条目,则需要重建总线实例。

public class GatewayConfigConfigurationProvider : IProvideConfiguration<GatewayConfig>
{

    public GatewayConfig GetConfiguration()
    {
        return new GatewayConfig
        {
            Channels =
            {
                new ChannelConfig
                {
                    Address = "http://localhost:25899/Headquarters/",
                    ChannelType = "Http"
                }
            },
            Sites =
            {
                new SiteConfig
                {
                    Address = "http://localhost:25899/RemoteSite/",
                    ChannelType = "Http",
                    Key = "RemoteSite"
                }
            }
        };
    }
}

此示例基于文档网站中的以下示例:

于 2015-11-03T09:14:06.333 回答
0

不幸的是,您不能在运行时更改 app.config 设置。我相信原因是 nservicebus 需要在端点启动之前对远程站点进行一些初始化。

于 2015-11-02T16:48:50.730 回答