我们在与集群中运行的服务通信时看到了 ProtocolExceptions。消息和 InnerException 消息:
System.ServiceModel.ProtocolException: You have tried to create a channel to a service that does not support .Net Framing.
---> System.IO.InvalidDataException: Expected record type 'PreambleAck', found '145'.
该服务在本地开发集群上运行,与该服务通信成功后抛出异常。
我们用于通信的代码是:
var eventHandlerServiceClient = ServiceProxy.Create<IEventHandlerService>(eventHandlerTypeName, new Uri(ServiceFabricSettings.EventHandlerServiceName));
return await eventHandlerServiceClient.GetQueueLength();
我们有重试逻辑(尝试之间的延迟增加)。但是这个电话永远不会成功。所以看起来服务处于故障状态并且无法从中恢复。
更新
我们还在日志中看到以下错误:
connection 0x1B6F9EB0 localhost:64002-[::1]:50376 target 0x1B64F3C0: invalid frame: length=0x1000100,type=514,header=28278,check=0x742E7465
2015 年 14 月 12 日更新
如果抛出此 ProtocolException,重试将无济于事。即使经过数小时的等待,它仍然失败。
我们记录端点地址
var spr = ServicePartitionResolver.GetDefault();
var x = await spr.ResolveAsync(new Uri(ServiceFabricSettings.EventHandlerServiceName),
eventHandlerTypeName,
new CancellationToken());
var endpointAddress = x.GetEndpoint().Address;
解析的端点看起来像
{"Endpoints":{"":"net.tcp:\/\/localhost:57999\/d6782e21-87c0-40d1-a505-ec6f64d586db\/a00e6931-aee6-4c6d-868a-f8003864a216-130945476153695343"}}
此终结点与 Service Fabric Explorer 报告的相同。
从我们看到的日志来看,该服务似乎正在运行(可以通过另一种 API 方法访问),但该特定调用从未成功。