这应该是可能的,但是我使用WCF ISerializable 接口概念进行了广泛搜索,但没有找到答案。希望高手能帮忙。
我读过的任何文档都指 info.AddValue(...) 类似于https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iserializable?view=中的概念网络框架-4.8
总之,我有一个软件,它可以在单个 EXE 中执行图像处理等操作。我想使用 WCF 服务/客户端方法,并在同一台 PC 或不同 PC 上的单独服务上进行此处理。那么基本上分配过程。
我有一个带有端点的 WCF 服务,连接并与服务通信等,这里都很好。
我想将在客户端上创建的类的整个对象(及其局部变量/对象)发送到服务。
我有从ISerializable接口派生的类。类属性是[Serializable]。 它具有所需的构造函数 & GetObjectData() public Foo(SerializationInfo info, StreamingContext context) public void GetObjectData(SerializationInfo info, StreamingContext context)
使用BinaryFormatter将此对象序列化为byte[] 并发送。在服务端,它被反序列化为类对象。
在序列化期间,它确实进入GetObjectData()并完成其任务。但是在反序列化过程中,我得到的类对象只是默认对象而不是发送的对象,局部变量/对象未初始化。
这个类对象不是一个单例,我也不希望这样,因为在单独的线程上有很多这样的实例。我认为不必对类的每个参数都进行 Addvalue。由于这只是我所指的一个类,最终我必须发送许多这样的类对象。
我尝试使用 GetRealObject() 使用具有IObjectReference接口概念的辅助类--> 但是如何从中获取原始对象?
我读过关于代理的文章,关于如何发送一个类的整个对象也没有很好的例子。
我想要这个类的整个对象在服务端。
希望我清楚我的问题。我是 WCF concpts 的新手,我可能错过了一些使这项工作成功的秘密。
请提出任何想法!
示例代码,这是我想做的基本版本。
我需要已经执行 Add() 的 cls2 对象,因此 num1 和 num2 已更新,以便在服务端接收到 Add() 的正确值,例如 100 和 200。ImgProcessingConnector() 正在处理连接到服务。
WCF 客户端
public Form1() { InitializeComponent(); cls2 = new Class2(); } private void button1_Click(object sender, EventArgs e) { byte[] cls2Byted = Class1.SerializedtoByte(cls2); ImgProcessingConnector.Instance().PerformAction(cls2Byted); } Class2 cls2 = null;
WCF 服务
public class ImageProcessingWCFService : IImageProcessingWCFService { public ImageProcessingWCFService() { } public bool PerformAction(byte[] cls2Byted) { Class2 cls2 = Class1.DeSerializedfromByte(cls2Byted) as Class2; cls2.Subtract(); return true; } }
2 类
[Serializable] public class Class2 : ISerializable { public Class2() { Add(); } public Class2(SerializationInfo info, StreamingContext context) { } public void Add() { num1 = 50 + 50; num2 = 100 + 100; } public void Subtract() { num1 = 50 - 50; num2 = 100 - 100; } int num1; int num2; public void GetObjectData(SerializationInfo info, StreamingContext context) { //nothing to do send ALL. } }