我设计了一个通过服务总线公开LOB应用程序的监听器。我必须写这个监听器,因为我们的应用程序受到不允许入站连接的防火墙的保护。
下面的代码是我如何使用NetTcpRelayBinding初始化我的监听器,它运行得很好:
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();
但是,我们有一个新要求:我需要能够支持代理。我的理解是NetTcp不支持代理(如果我错了请纠正我)因此我需要能够回退到HTTP(如果可能的话我仍然想要使用TCP,并且必要时只回退到HTTP)。我做了一些研究,发现ServiceBus支持"AutoDetect" connectivity mode“探测当前网络环境是否有连接选项。如果两者都可用,系统将默认选择TCP”。这正是我想要的。但是,我不知道如何改进我的代码以支持此功能。
显然我会改变:
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Tcp;
带
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
但我不知道还需要改变什么。我猜我除了NetTcp之外还需要配置另一个绑定但是我该怎么办?
答案 0 :(得分:1)
AutoDetect
是默认的连接模式 - 您无需添加任何内容。它应该与代理一起使用。