Я разработал слушателя, который предоставляет приложение 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", который "проверяет, доступен ли какой- либо вариант подключения для текущей сетевой среды. Если оба доступны, система будет выбирать TCP по умолчанию". Это именно то, чего я хочу. Однако я не знаю, как улучшить свой код для поддержки этой функции.
Очевидно, я изменюсь:
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Tcp;
с
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
но я не знаю, что еще мне нужно изменить. Я предполагаю, что мне как-то нужно настроить другое связывание в дополнение к NetTcp, но как это сделать?
AutoDetect
- это режим подключения по умолчанию - вам не нужно ничего добавлять. И он должен работать с прокси.
AutoDetect
.