如何通过对类的序列化实现WCF的远程接口调用?

问题描述

我建立的服务器端和用户端通过WCF实现接口调用,简单说来是传递一个自定义类对象,当然大家会想到序列化,我选用的是BinaryFormatter+MemoryStream,但不管是流类型传递还是转换为byte[]传递都会出现问题(如果各位大神对问题的种类感兴趣我可以给大家截图),我想请教大神们的是:1、基于BinaryFormatter应该选用什么流类型?2、除了Http传输以及Socket传输之外,用纯粹的WCF接口调用怎么远程传递一个自定义对象?IDE是VS2010,语言C#。下面是关于序列化(客户端)、反序列化(服务器端)的部分代码,其中实验类User里仅有数据成员。客户端:Useru=newUser();//自定义类/*对类进行操作*/IFormatterb=newBinaryFormatter();MemoryStreamms=newMemoryStream();b.Serialize(ms,u);intresult=wcfserver.getProfile(ms.GetBuffer());//服务器端函数服务器端:publicintgetProfile(byte[]bytes){Useru=newUser();MemoryStreamms=newMemoryStream(bytes);IFormatterb=newBinaryFormatter();u=(User)b.Deserialize(ms);/*剩余操作*/

解决方案

本帖最后由 clegendc 于 2011-12-06 10:27:58 编辑
解决方案二:
我调用WCF服务的时候没有用系列化,我用的是异步传输,在COMPLETE事件通过遍历获取数据在客户端专门有个对象来接数据我用的是LIST来接的。你如果在客户端用User类的话,应该用Serivicereference1.User而不是直接用User。
解决方案三:
不好意思我是个WCF新手,问一下如何实现客户端对服务器端类的引用,ServiceReference1对远端自定义类不可见怎么办?
解决方案四:
你在调用服务的时候第一步不是添加服务引用吗?添加过后,默认服务名就叫做ServiceReference1以下是我异步方法里面事件1.在load()事件里面声明ServiceReference1.Service1Clientsc=newServiceReference1.Service1Client();sc.JQHotSpotCompleted+=newEventHandler<ServiceReference1.JQHotSpotCompletedEventArgs>(sc_JQHotSpotCompleted);2.在Completed事件里面调用voidsc_JQHotSpotCompleted(objectsender,ServiceReference1.JQHotSpotCompletedEventArgse){List<Hot>lst=newList<Hot>();doubleeast,west,south,north;foreach(ServiceReference1.HotSpotsine.Result){QuadTree.Quadtree2Geodetic(s.QTREE.ToString(),outeast,outsouth,outwest,outnorth);Hoth=newHot();h.X=(west+east)/2;h.Y=(north+south)/2;h.Weight=Convert.ToDouble(s.NUM);lst.Add(h);}this.hotspot.ISQuickSearch=true;this.hotspot.ItemSource=lst;this.hotspot.Bind();}
解决方案五:
没错,ServiceReference1确实实现了远端定义的一些方法,但我是想引用远端定义的类(其实跟结构体没什么区别,纯数据包而已),请问怎么实现这个服务器端自定义类的客户端引用呢?
解决方案六:
ServiceReference1.类名,我上面的Complete事件中ServiceReference1.HotSpot就是引用服务器端的类。这样就保持一致了
解决方案七:
我换了种更cuo的方式:本来想在IService1.cs文件里的[DataContract]域添加自定义类User,但是UpdateServiceReference之后在ObjectBrowser->Client->{}Client.ServiceReference1里找不到User,之后我果断在默认的CompositeType类里添加了自己需要的属性、方法,这样才最终实现了远程调用...请问:是否可以在IService1.cs文件里定义多个[DataContract](数据契约)类?除了重写CompositeType类之外还有别的方法引用自定义类吗?
解决方案八:
[DataContract]定义借口要和你方法一致,多少个无所谓,数据模型你可以建一个工程专门存放。服务端引用,客户端调用就和那个工程基本没什么关系了,你需要用的数据模型就是服务器端的。而不是那个工程的了。

时间: 2024-10-31 23:30:14

如何通过对类的序列化实现WCF的远程接口调用?的相关文章

java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)_java

一般在项目开发中难免遇到外部接口的调用,本文实例讲述了java后台调用HttpURLConnection类模拟浏览器请求的方法.可用于接口调用.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package com.cplatform.movie.back.test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import ja

c++类的序列化问题请教

问题描述 c++类的序列化问题请教 各位大神,小弟需要将一个c++类序列化为json来进行网络传输,有一个小小问题想请教一下,我在网上查了一下,很多都说要用jsoncpp.看了很久还是不知道这个序列化的方法. 现在假设我有一个类如下: class A { public: int A; void hello(); } 请问我要怎么进行序列化呢 解决方案 简单的话,直接拼接字符串就可以了. 解决方案二: 序列化使用jsoncpp或者之类的库,还是需要自己写序列化代码的 参考:http://qiusu

Image类的序列化

利用GDI+图形设备接口提供的Image类我们可以很方便地显示JPEG.GIF等文件格式的图片,但美中不足的是Image类未提供序列化数据的功能,如果要将从JPEG.GIF等格式的文件中读取的图片数据保存到我们自己开发的应用程序文档中,并能从文档中读取已经保存的图片数据并正确的显示出来,就必须实现Image类数据的序列化. 假如在你的文档类中有个指向Image类的成员指针变量m_pImage用于显示图片,那么在文档类的序列化函数Serialize(CArchive& ar)中加入以下的代码就能实

Java序列化——transient关键字和Externalizable接口

    提到Java序列化,相信大家都不陌生.我们在序列化的时候,需要将被序列化的类实现Serializable接口,这样的类在序列化时,会默认将所有的字段都序列化.那么当我们在序列化Java对象时,如果不希望对象中某些字段被序列化(如密码字段),怎么实现呢?看一个例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import java.io.Serializable; import java.util

对象-oc 类的继承的实质,以及是怎样调用方法 和函数的

问题描述 oc 类的继承的实质,以及是怎样调用方法 和函数的 父类里声明的属性,会生成默认生成一个私有的成员变量.即不能被子类访问,那么子类通过继承得到了父类的属性,只能通过setter 和 getter 方法区访问父类的私有变量,那么这个私有变量不属于子类,那么在实例化这个子类的时候就没有这个私有变量,那么通过继承过来的setter 和getter方法访问的是什么,私有变量根本就没有生成啊! 同理在使用{}声明的私有变量同样可以在提供外部接口让外部访问,但是当子类继承后也可以通过生成实例对象,

java 某个类的几个对象,这些对象调用类中一个函数,是各自拥有自己的函数代码还是使用同一段代码?

问题描述 1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?2.java 继承中,子类从父类得到一些普通函数,这些函数的代码,是子类自己独自拥有一份还是和父类使用同一段函数代码.3.第一次发帖,积分什么的不会搞,貌似自己也没有积分,呵呵,大家包涵! 解决方案 引用1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?这几个对象调用的当然是同一段代码了.jvm中有一个ja

dao-jpa DAO层类如何实现继承方法或实现接口?

问题描述 jpa DAO层类如何实现继承方法或实现接口? 如果我的接口是这样定义public interface UserModelDao extends PagingAndSortingRepository, JpaSpecificationExecutor{} ,那么如果我想添加实现类来拓展方法等的话,会出现有很多继承接口中未实现的方法,如何处理这种情况?或者有什么办法来处理dao层让我能够添加新的方法或使用jpa本身的方法,使得开发灵活简单? 解决方案 AAA hibernate实现增删改

求助 需要写一个WCF的服务接口用来访问数据库,报文用XML的结果,哪位能给个例程或者提供个思路呢,不甚感激,我原来的应该程序时用delphi写的。

问题描述 求助需要写一个WCF的服务接口用来访问数据库,报文用XML的结果,哪位能给个例程或者提供个思路呢,不甚感激,我原来的应该程序时用delphi写的,现在需要写一个接口给第三方查询数据库用,请各位大虾帮帮忙 解决方案 解决方案二:在线等待中,谢谢各位解决方案三:请问你做什么系统的?我做税控需要这东东,正想研究wcf呢!

如何在普通类实例的线程过程中,同步调用执行在类实例自身所在的原来的那个线程中的方法

问题描述 如何在普通类实例的线程过程中,同步调用执行在类实例自身所在的原来的那个线程中的方法如后代码,是一个常见的实例,讲的是通过Control.Invoke在线程函数中,同步调用窗体主线程中的Form1实例的普通方法txt.但问题是,很多时候我们自己自定义的类,并不是从Control类继承的,从而也没有这个功能的Invoke方法供调用,这种类要怎么设计呢?虽然说用的示例代码是vb.net的,但严格来说,这个和语言无关,是一个.net开发的基本问题.ImportsSystemImportsSys