我正致力于向分布式系统发送消息。因此我更喜欢使用Gateway。问题是我正在动态获取Sitekeys,地址和channelType信息。 Nservicebus在app.config中检查sitekeys和相应的地址。但我的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);
答案 0 :(得分: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"
}
}
};
}
}
此示例基于文档网站中的以下示例:
答案 1 :(得分:0)
很遗憾,您无法在运行时更改app.config设置。我相信原因是nservicebus需要在端点启动之前对远程站点进行一些初始化。