Azure Service Bus WCF中继超时

时间:2018-02-22 17:04:29

标签: azure wcf azureservicebus azure-servicebusrelay

我遇到Azure Service Bus WCF中继服务的问题,其中WCF客户端无法通过WCF Relay从客户防火墙后面的内部部署服务获得任何结果。 WCF客户端作为Azure云服务在Azure上运行。 WCF客户端报告的错误消息是:

System.ServiceModel.FaultException: 50200: None of the connected listeners accepted the connection within the allowed timeout. TrackingId:f11c6747-8628-44b3-9080-706e1a9122d5_G7, SystemTracker:xxxxxxxx.servicebus.windows.net:abc, Timestamp:2/21/2018 7:44:59 PM, Resource:sb://xxxxxxxx.servicebus.windows.net/abc

Server stack trace: 
   at 
System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Client.RemoteService.Call(String parameter1, String parameter2)
   ...

从内部部署的WCF服务日志文件中,没有任何迹象表明请求已成功。

我在其他客户防火墙后面的不同Azure WCF中继服务上运行相同的WCF服务。其他人正在工作。这让我相信问题是针对该客户防火墙背后的网络环境的。

我使用此特定错误消息搜索了此类问题,但我找不到任何问题。类似的讨论与502错误代码有关,但不是50200.这些讨论暗示了代理服务器设置。我试图在WCF服务上将BasicHttpRelayBinding.UseDefaultWebProxy设置为false。但这并没有解决问题。

这是WCF服务器端代码:

ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Https;
var serviceAddress = ServiceBusEnvironment.CreateServiceUri("https", 
    "xxxxxxxx.servicebus.windows.net", "abc");

BasicHttpRelayBinding basicHttpRelayBinding = new BasicHttpRelayBinding();
basicHttpRelayBinding.UseDefaultWebProxy = false;

ServiceHost serverHost = new ServiceHost(typeof(MyService));
ServiceEndpoint serviceEndpoint = serverHost.AddServiceEndpoint(typeof(IMyService), 
    basicHttpRelayBinding, serviceAddress);
IEndpointBehavior endpointBehavior = new TransportClientEndpointBehavior
{
    TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(keyName, 
        keyValue)
};
serviceEndpoint.Behaviors.Add(endpointBehavior);

serverHost.Open();

这是WCF客户端代码:

BasicHttpRelayBinding basicHttpRelayBinding = new BasicHttpRelayBinding();
basicHttpRelayBinding.UseDefaultWebProxy = false;
var cf = new ChannelFactory<T>(basicHttpRelayBinding,
           new EndpointAddress(ServiceBusEnvironment.CreateServiceUri(
               "https", "xxxxxxxx", "abc")));
IEndpointBehavior endpointBehavior = new TransportClientEndpointBehavior
{
    TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(keyName, 
        keyValue)
};
cf.Endpoint.Behaviors.Add(endpointBehavior);
var ch = cf.CreateChannel();
var response = ch.Call(parameter1, parameter2);

我的问题是:

  1. 有没有人遇到这样的问题?

  2. 鉴于我无法直接控制客户防火墙后面的网络配置。诊断这类问题的最佳方法是什么?我可以向客户寻求帮助,但我需要告诉他们要寻找什么。

0 个答案:

没有答案