2014-10-03 5 views
2

msdn 샘플 코드 (http://code.msdn.microsoft.com/windowsazure/Relayed-Messaging-Bindings-ca039161)를 시도했으며 자체 테스트 응용 프로그램에서 발생한 동일한 문제가 있습니다. 릴레이 모드에서 잘 작동하는 예제가 있지만 하이브리드로 전환하자마자 클라이언트가 시간 초과 예외로 서버에 연결하지 못합니다. 나는 타임 아웃을 올렸고 추적을 켜 놓았지만 모든 추적 프로그램은 많은 경고입니다.푸른 메시지 버스에서 TCP 릴레이 바인딩을 사용하는 하이브리드 ConnectionMode를 사용하는 시간 초과

Failed to open Microsoft.ServiceBus.Channels.ClientFramingDuplexSessionChannel 
Failed to open Microsoft.ServiceBus.SocketConnectionChannelFactory`1+DuplexSessionChannel[System.ServiceModel.Channels.IDuplexSessionChannel] 

나는 설정을 성공하지 TCP, HTTP 및 자동 검색 사이에 설정 시스템 연결 모드 환경을 시도했습니다. 서버에 대한

코드 : 클라이언트에 대한

  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(); 

감사합니다,

로빈

+0

안녕하세요. 이것은 매우 오래된 게시물이지만 해결책을 찾았습니까? 예제를 실행하는 동안 똑같은 문제가 발생합니다. –

답변

0

당신은에 의해 생성 된 클라이언트에 OperationTimeout를 설정해야 채널 팩토리 :

var ch = cf.CreateChannel(); 

    // Add this Line 
    ch.OperationTimeout = new TimeSpan(0, 0, 10, 0); 

    ((ICommunicationObject)ch).Open(); 
    Console.WriteLine(ch.GetData(5)); 
    Console.ReadLine();