如何以编程方式配置Azure ServiceBus监听器'连接模式

本文关键字:监听器 模式 连接 ServiceBus Azure 编程 方式 配置 | 更新日期: 2023-09-27 18:13:29

我设计了一个通过服务总线公开LOB应用程序的侦听器。我必须编写这个侦听器,因为我们的应用程序受到防火墙的保护,不允许入站连接。

下面的代码是我如何使用netttcprelaybinding初始化我的监听器,它工作得很好:

var sharedSecretServiceBusCredential = new TransportClientEndpointBehavior()
{
    TokenProvider = TokenProvider.CreateSharedSecretTokenProvider("listener", "MySecret")
};
var address = ServiceBusEnvironment.CreateServiceUri("sb", "MyNamespace", "CrmConnectorService");
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Tcp;
_host = new ServiceHost(typeof(CrmConnectorService), address);
var binding = new NetTcpRelayBinding()
{
    CloseTimeout = TimeSpan.FromMinutes(5),
    OpenTimeout = TimeSpan.FromMinutes(5),
    ReceiveTimeout = TimeSpan.FromMinutes(5),
    SendTimeout = TimeSpan.FromMinutes(5)
};
binding.Security.RelayClientAuthenticationType = RelayClientAuthenticationType.RelayAccessToken;
var endpoint = _host.AddServiceEndpoint(typeof(ICrmConnectorService), binding, address);
var serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Private);
_host.Description.Endpoints[0].Behaviors.Add(serviceRegistrySettings);
_host.Description.Endpoints[0].Behaviors.Add(sharedSecretServiceBusCredential);
_host.Open();

然而,我们有一个新的要求:我需要能够支持代理。我的理解是,netcp不支持代理(请纠正我,如果我错了),因此我需要能够回退到HTTP(我仍然想使用TCP,如果可能的话,只有回退到HTTP,如果必要)。我做了一些研究,发现ServiceBus支持"自动检测"连接模式,该模式"探测当前网络环境中是否有可用的连接选项"。如果两者都可用,系统将默认选择TCP。这正是我想要的。但是,我不知道如何改进我的代码来支持这个特性。

显然我要改变:

ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Tcp;

ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

但我不知道我还需要改变什么。我猜我需要配置另一个绑定除了netttcp,但我怎么做呢?

如何以编程方式配置Azure ServiceBus监听器'连接模式

AutoDetect是默认的连接模式——您不需要添加任何内容。