webservice如何返回自定义类型

问题描述

webservice如何返回自定义类型//////////////////////////////////////类定义/////////////////////////////////////namespaceHumanResource{[Serializable]publicclassEmployee{protectedstringEmployeeName;protectedstringEmployeePhone;publicEmployee(){this.EmployeeName="NoName";this.EmployeePhone="Nophone";}publicEmployee(stringm_name,stringm_phone){this.EmployeeName=m_name;this.EmployeePhone=m_phone;}}}/////////////////////////////////////Webservice:////////////////////////////////////usingSystem;.................usingHumanResource;namespaceServiceTest{publicclassMyService:System.Web.Services.WebService{publicMyService(){.........}...............//方法[WebMethod]publicEmployeeGetEmployee(){Employeem_emp=newEmployee();returnm_emp;}}}///////////////////////////////////////////////////调用Webservice//////////////////////////////////引用Webservice引用名为WEBSWS//如何调用GetEmployee得到Employee类型对象usingSystem;...........usingHumanResource;namespaceTestHR{........WEBSWS.MyServicem_ws=newWEBSWS.MyService();Employeeemp=m_ws.GetEmployee();//报错//错误信息:Cannotimplicitlyconverttype'TestHR.localhost.Employee'to'HumanResource.Employee'WEBSWS.Employeeemp=m_ws.GetEmployee();//正确}有什么办法使Employeeemp=m_ws.GetEmployee();不报错,Employee类该怎么写?

解决方案

解决方案二:
貌似这个比较合适WCF首先,你给非常非常的确定,他们使用的是同一个类型,否则,系统会……WebServices和WCF不同,好像所有类型都是自动生成的(指代理类),因此,要避免你说的那总情况需要手动实现代理类了,比较简单的方法是修改已经生成好的代理类。不过这么做玩之后并不适合更新服务(因为会还原)
解决方案三:
楼上的,怎么修改代理类才能让Employeeemp=m_ws.GetEmployee();不报错?我记得测试localwebservice的时候必须这么写:WEBSWS.Employeeemp=m_ws.GetEmployee();但是布置到服务器上以后Employeeemp=m_ws.GetEmployee();这样写就不会报错了,不知道为什么
解决方案四:
我就是这么用的,没发现什么报错
解决方案五:
命名空间问题你默认导入的WebServices,用了WEBSWS命名空间你要是把代理类的源码打开看看就知道了能看到返回类型xxx.employee这样的完全限定名
解决方案六:
做个强制类型转换试试看?
解决方案七:
Togyc:我引用local跟服务器上的代理类都是这样的PublicFunctionmethodname(ByValobjrequestAsrequest)Asresponse你的意思local的应该是这样?PublicFunctionmethodname(ByValobjrequestAsrequest)Asnamespace.response
解决方案八:
恩,差不多导入的代理类,使用道路的名称作为命名空间,如Local那默认那个就是Local.Response,而完整的名称可能是App.Local.Response(假设你的项目跟命名空间是App)你要用的类是是App.Response说以你要把那个名字改成符合你的命名空间上,
解决方案九:
代理类自动将可序列化的自定义的实体类进行了xml序列化。个人推荐尽量不要使用这种方式,而是使用自定义序列化的方式,序列化可以使用二进制的序列化方法。这样效率更高一些。/////////////////////////////////////Webservice:////////////////////////////////////usingSystem;.................usingHumanResource;namespaceServiceTest{publicclassMyService:System.Web.Services.WebService{publicMyService(){.........}...............//方法[WebMethod]publicstringGetEmployee(){Employeem_emp=newEmployee();returnSerializer.Serialize(m_emp);}}}在访问webservice的一端,先将返回的序列化之后的对象反序列化为实体类后再来使用。usingHumanResource;namespaceServiceClientTest{publicclassMyServiceClient{publicMyServiceClient(){.........}...............//方法publicEmployeeGetEmployee(){stringstrm_emp=service.GetEmployee();returnSerializer.DeSerialize(m_emp)asEmployee;}}}客户端程序(可能也是个web程序)通过调用MyServiceClient的方法来访问WebService.二进制序列化反序列化的方法:publicstaticstringSerialize(objectobj){stringserializedObject=null;if(obj!=null){IFormatterformatter=newBinaryFormatter();using(Streamstream=newMemoryStream()){formatter.Serialize(stream,obj);longcount=stream.Length;byte[]buff=newbyte[count];stream.Seek(0,SeekOrigin.Begin);stream.Read(buff,0,Convert.ToInt32(count));stream.Close();serializedObject=Convert.ToBase64String(buff);}}returnserializedObject;}publicstaticobjectDeSerialize(stringserializedObject){object@object=null;if(serializedObject!=""){IFormatterfter=newBinaryFormatter();byte[]buff=Convert.FromBase64String(serializedObject);using(Streamstream=newMemoryStream(buff)){@object=fter.Deserialize(stream);stream.Close();}}return@object;}希望对你的问题有帮助.:)
解决方案十:
可以直接调用WEBSERVICE实例化你的自定义类型啊,就和你实例化一个WEBSERVICE函数一样。。有什么区别吗?
解决方案十一:
TXHforgyc.我想我明白你意思了
解决方案十二:
定义方法不对,试试下面的//定义交换数据的类型[XmlRoot("Employee",Namespace="http://work.example.com.cn")]publicclassEmployee{[XmlElement("EmployeeName",IsNullable=false)]publicstringEmployeeName;[XmlElement("EmployeePhone",IsNullable=false)]publicstringEmployeePhone;}
解决方案十三:
不明LZ在说什么
解决方案十四:
lz要干嘛?

时间: 2024-11-02 15:36:41

webservice如何返回自定义类型的相关文章

关于返射编程通过MethodInfo.Invoke返回自定义类型数据的疑问

问题描述 stringmodelName="tempClass";//获取tempNameSpace.tempClass类Typet=Type.GetType("tempNameSpace."+modelName+",tempNameSpace");//获取tempClass类中的tempMethod方法MethodInfomGetPageList=t.GetMethod("tempMethod");if(mGetPageLi

arraylist-android怎么接收java webservice返回的自定义类型中的List集合

问题描述 android怎么接收java webservice返回的自定义类型中的List集合 webservice用的是jax-ws android用的是ksoap 服务器返回的类型 public final class Group implements Serializable { private int id; private String name; private int bGID; public List<Group> group = new ArrayList<Group&

【SSH项目实战】国税协同平台-10.自定义返回结果类型

上一篇我们进行了自定义异常的设置和捕获,然后跳转到我们自己的异常通知界面.那么,我们捕获到异常以后,我们想利用前面请求的参数做一些事情,我们就可以利用struts的"自定义返回结果类型". 类"class StrutsResultSupport"就是"struts类结果返回支持",如果某个类继承了这个父类的话,这个类就会被执行. 可以给这个类传入3个参数:location.parse.encode. 在使用之前,我们先处理一些东西 我们把Acti

C#开发webservice调用SAP的webservice后返回值是表类型,如何获取值?

问题描述 求助,C#调用SAP的webservice后返回值是表类型,如何获取表的行数? 解决方案 解决方案二:什么叫表类型?DataTable?SAP天堂也返回这样的东西?解决方案三:ws返回的就是xml了,里面的数据是可以获取的.至于你说的表,具体是什么?如果是datatable,好办,解析xml就是了.如果单单是某个表名,那就啥都不能获取到.解决方案四:引用2楼guwei4037的回复: ws返回的就是xml了,里面的数据是可以获取的.至于你说的表,具体是什么?如果是datatable,好

【转】WebService中使用自定义类的解决方法(5种)

原址:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lxinxuan/wa.rar        最近一个项目要用到webservice调用业务层类,刚开始的时候遇到了一点小麻烦,经过这两天的总结和实践,终于总结出几个比较常见的情况下的解决方法.         不知道大家是怎么解决,可能太简单了,所以没有觉得它是一个问题.反正我在博客园中没有搜索到相关

Struts2类型转换(一) 常规类型,自定义类型,错误处理

Struts2的类型转换是基于OGNL表达式的.有良好的扩展性. WEB应用接收到表单提交的数据都 是String类型的,Struts2可方便的转换为 常规类型(数值,日期)/ 自定义类型(User,Point类). 如果转换中出现异常,conversionError拦截器会自动处理该异常. 一, 常规类型的转换: 比如表单提交的信息有 用户名,生日, 年龄, Action中对应的数据类型分别是 String, Date, int.没什么好说的, Struts2会自动完成. Struts2内建了

Linq to Sql:N层应用中的查询(上) : 返回自定义实体

如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时 候,我们使用var来定义L2S查询,让IDE自动推断变量的具体类型 (IQueryable<匿名类型>),并 提供友好的智能提示:而且可以充分应用L2S的延迟加载特性,来进行动态查询.但如果我们希望将业务 逻辑放在一个独立的层中(譬如封装在远程的WCF应用中),又希望在逻辑层应用Linq to sql,则情况就 比较复杂了:由于我们只能使用var( IQueryable<

asp.net-在ASP.net中获取Html元素如何并返回Json类型

问题描述 在ASP.net中获取Html元素如何并返回Json类型 在ASP.net中获取Html元素如何并返回Json类型 并且获得Html的所有元素 解决方案 asp.net webservice返回json 解决方案二: 使用page.controlshttp://www.jb51.net/article/16536.htm

oracle中有关于自定义类型用游标遍历问题

问题描述 oracle中有关于自定义类型用游标遍历问题 自定义一个函数返回的是一个自定义的类型 create or replace type type_name as table of varchar2(100): 请问 如何在存储过程中的游标中遍历这个自定义类型的返回值.在游标中使用 select * from 自定义类型值 报错,好象是自定义的类型值不是表或者视图 不能直接select, 那我现在怎么用游标遍历这个自定义值啊