C# 正在处理thrift客户端-远程端关闭异常
当我将我的thrift客户端引用放入using块时,我得到一个TTTransportException:“无法读取,远程端已关闭异常。”C# 正在处理thrift客户端-远程端关闭异常,c#,soa,thrift,C#,Soa,Thrift,当我将我的thrift客户端引用放入using块时,我得到一个TTTransportException:“无法读取,远程端已关闭异常。” 远程方法调用实际上成功了,但我观察到Processor.Process方法被调用了两次,触发异常的是第二次调用。是否应该调用Process方法两次?如果我像这样显式调用Dispose,我假设我应该这样做,以便尽快关闭套接字。这种行为是经过设计的 调用Process()方法直到连接结束,通常是因为客户端断开连接。在这种情况下,ReadMessageBegin()
远程方法调用实际上成功了,但我观察到Processor.Process方法被调用了两次,触发异常的是第二次调用。是否应该调用Process方法两次?如果我像这样显式调用Dispose,我假设我应该这样做,以便尽快关闭套接字。这种行为是经过设计的 调用
Process()
方法直到连接结束,通常是因为客户端断开连接。在这种情况下,ReadMessageBegin()
将失败,出现此异常,该异常在Process()
循环的正下方
对于好奇的人来说:例外是
//THRIFT IDL
namespace csharp ReferenceData.API
exception EntityDoesNotExistException {
1: string Key;
}
service ReferenceDataService {
bool HelloWorld() throws (1: EntityDoesNotExistException entityDoesNotExistException);
}
namespace Server
{
public class Service: ReferenceDataService.Iface
{
public bool HelloWorld()
{
throw new EntityDoesNotExistException(){Key = "TEST KEY"};
}
}
}
namespace Server
{
class Program
{
static void Main(string[] args)
{
try
{
var processor = new ReferenceData.API.ReferenceDataService.Processor(new Service());
TServerTransport serverTransport = new TServerSocket(9094);
TServer server = new TThreadedServer(processor, serverTransport);
Console.WriteLine("Running the Payroll Service on port {0}...", "9094");
server.Serve();
}
catch (Exception x)
{
Console.WriteLine(x.StackTrace);
}
Console.ReadLine();
}
}
}
namespace Client
{
class Program
{
static void Main(string[] args)
{
var transport = new Thrift.Transport.TSocket("127.0.0.1", 9094);
transport.Open();
var service = new ReferenceDataService.Client(new Thrift.Protocol.TBinaryProtocol(transport));
using (service)
{
try
{
service.HelloWorld();
}
catch (EntityDoesNotExistException ex)
{
Console.WriteLine(ex.Key);
}
}
Console.ReadLine();
}
}
}