2014-07-18 71 views
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之外,我還需要配置另一個綁定,但我該怎麼做?

回答

1

AutoDetect是默認的連接模式 - 你不需要添加任何東西。它應該與代理一起工作。

+0

確實AutoDetect是默認的,但我真正想弄清楚的是如何配置兩個綁定?在我提供的代碼示例中,您可以看到我配置了TCP綁定,我想知道的是如何配置HTTP綁定IN ADDITION到TCP綁定? – desautelsj

+0

您不需要配置其他綁定即可使其使用HTTP連接模式工作。如果連接模式設置爲「AutoDetect」,則NetTcp綁定將返回使用HTTP,如果它不能使用TCP。 – TheDude

+0

好的,我想我在跟着你在說什麼。但是如何配置HTTP綁定呢?如果我的代理需要身份驗證,我需要指定用戶名和密碼,例如?我猜它會使用在IE的「Internet選項」中配置的默認代理設置,但是如果我不想依賴這些默認值並且我想指定我自己的用戶+密碼? – desautelsj

相關問題