我遇到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);
我的问题是:
有没有人遇到这样的问题?
鉴于我无法直接控制客户防火墙后面的网络配置。诊断这类问题的最佳方法是什么?我可以向客户寻求帮助,但我需要告诉他们要寻找什么。