我想在节俭服务中使用一个流,例如在服务方法中使用一个流,以使它具有一个流或类似该方法的参数(例如,能够将IDataReader的结果序列化为一个流,然后在另一服务器端反序列化对数据的引用)。
我不认为这是明确可能的,但是我想知道是否还有另一种方法可以实现类似的目的。
谢谢。
最佳答案
Apache thrift不支持发送流。您可以获得的最接近的结果是发送一个字节数组。
为了使用节俭实现类似流的体验,您可以创建一个接口,以字节数组的形式返回流的下一部分。
在C#语法中,它看起来像
interface MyService
{
int OpenStream(string path);
byte[] ReadNextBlock(int openedStreamId, long maxBlockSize);
}
OpenStream返回“流ID”,该ID在每次调用时传递给ReadNextBlock。在服务器端,您可以保存一个Dictionary(key-openStreamID,value-Stream),该字典将用于保持源流打开并从中读取下一个块。
您还可以在客户端创建一个帮助程序类,该类将是Stream的后代,并将使用OpenStream和ReadNextBlock来获取实际数据。