Я пробовал код примера msdn (http://code.msdn.microsoft.com/windowsazure/Relayed-Messaging-Bindings-ca039161) и имел ту же проблему, с которой я столкнулся в своем тестовом приложении. У меня есть пример, который отлично работает в режиме Relay, но как только я переключаюсь на Hybrid, клиент не может подключиться к серверу с исключением таймаута. Я увеличил таймауты и включил отслеживание, но все трассировки показывают кучу предупреждений, например.Тайм-аут с использованием гибридного соединенияMode с привязкой к ретрансляции TCP в шине сообщений Azure
Failed to open Microsoft.ServiceBus.Channels.ClientFramingDuplexSessionChannel
Failed to open Microsoft.ServiceBus.SocketConnectionChannelFactory`1+DuplexSessionChannel[System.ServiceModel.Channels.IDuplexSessionChannel]
Я попытался настроек режима подключения системы среды настройки между Tcp, Http и AutoDetect без успеха.
Код для сервера:
ServiceHost sh = new ServiceHost(typeof(Service1));
var uri = ServiceBusEnvironment.CreateServiceUri("sb", "<serverNamespace>", "testing");
var binding = new NetTcpRelayBinding();
binding.ConnectionMode = TcpRelayConnectionMode.Hybrid;
binding.Security.Mode = EndToEndSecurityMode.None;
binding.OpenTimeout = new TimeSpan(0,0,10,0);
binding.ReceiveTimeout = new TimeSpan(0, 0, 10, 0);
binding.SendTimeout = new TimeSpan(0, 0, 10, 0);
sh.AddServiceEndpoint(
typeof(IService1), new NetTcpRelayBinding(), uri
)
.Behaviors.Add(new TransportClientEndpointBehavior
{
TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("<keyName>", "<sharedaccesskey>")
});
sh.Open();
Console.WriteLine("Press ENTER to close");
Console.ReadLine();
sh.Close();
Код для клиента:
var binding = new NetTcpRelayBinding {ConnectionMode = TcpRelayConnectionMode.Hybrid};
binding.Security.Mode = EndToEndSecurityMode.None;
binding.OpenTimeout = new TimeSpan(0, 0, 10, 0);
binding.ReceiveTimeout = new TimeSpan(0, 0, 10, 0);
binding.SendTimeout = new TimeSpan(0, 0, 10, 0);
binding.CloseTimeout = new TimeSpan(0, 0, 10, 0);
var cf = new ChannelFactory<IService1>(
binding,
new EndpointAddress(
ServiceBusEnvironment.CreateServiceUri("sb", "<serviceNamespace>", "testing")
));
cf.Endpoint.Behaviors.Add(new TransportClientEndpointBehavior
{
TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("<keyName>", "<sharedAccessKey>")
});
var ch = cf.CreateChannel();
((ICommunicationObject)ch).Open();
Console.WriteLine(ch.GetData(5));
Console.ReadLine();
Спасибо за чтение,
Робин
Hi. Это очень старый пост, но нашли ли вы решение? Я вижу ту же проблему при запуске примеров. –