0
我設計了一個偵聽器,通過服務總線公開LOB應用程序。我不得不編寫這個監聽器,因爲我們的應用程序受到不允許入站連接的防火牆的保護。如何以編程方式爲Azure ServiceBus偵聽器配置'AutoDetect'連接模式?
下面的代碼是我如何使用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之外,我還需要配置另一個綁定,但我該怎麼做?
確實AutoDetect是默認的,但我真正想弄清楚的是如何配置兩個綁定?在我提供的代碼示例中,您可以看到我配置了TCP綁定,我想知道的是如何配置HTTP綁定IN ADDITION到TCP綁定? – desautelsj
您不需要配置其他綁定即可使其使用HTTP連接模式工作。如果連接模式設置爲「AutoDetect」,則NetTcp綁定將返回使用HTTP,如果它不能使用TCP。 – TheDude
好的,我想我在跟着你在說什麼。但是如何配置HTTP綁定呢?如果我的代理需要身份驗證,我需要指定用戶名和密碼,例如?我猜它會使用在IE的「Internet選項」中配置的默認代理設置,但是如果我不想依賴這些默認值並且我想指定我自己的用戶+密碼? – desautelsj