100分求解webservice中的实体类在客户端做参数传递解决方法

yumanqing 2007-03-16 10:19:24
webservice中定义的试题类,如何在客户端引用,
[WebMethod]
public void test(User user)
{}
[Serializable]
public class User
{
public User()
{}
private string _uname;
private string _upass;
public string uName
{
get { return _uname; }
set { _uName = value;}
}
public stirng uPass
{
get { return _uPass; }
set { _uPass = value;}
}
}
我在WebService 中有个类库Model,中有若干个实体类,写法如上,问题是有些有3个在客户端可以直接引用,还有的就不行,从昨天搞到今天,还是不行,也想了用别的办法,如传递数组string[],在实例实体类的对象,但也麻烦,或传递XML,XML不是很熟悉。
现请做过这样的各位大哥请指点,谢谢,分是小问题。咱是爽快人。
...全文
887 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
offer 2008-02-11
  • 打赏
  • 举报
回复
好久没来了,以前没说清楚,我是这么解决的,Webservice返回业务对象序列化后的xml格式字符串,到客户段后返序列化为对象进行显示处理。你可以自定义一个xml包,这样基本上所有的操作在WebService可以只用一个方法作为入口。
example:
[WebMethod]
public string Do(string objString)
{

//1、从包头获取是要进行何种类型的操作,以及对象的类型
//2、将包体反序列化为对象
//3、对象操作,如增,删,改
return str;
}

客户段也需要有对象序列化和反序列化的相关方法,你可以弄一个工具类。
yumanqing 2007-03-20
  • 打赏
  • 举报
回复
有那个好心人给我远程协助看一下,100分奉上,十分感谢 QQ 466497102
周围没有懂的呀,着急,
yumanqing 2007-03-20
  • 打赏
  • 举报
回复
我的webservice端和客户端是同时写的,我一边再 webservice 中添加类,一边再客户端更新web引用,可就是最后添加的一个实体类引用不到,只是不明白,我试过把web引用删除重新引用的,还是不行,有谁遇到过吗?分是小事情
yumanqing 2007-03-20
  • 打赏
  • 举报
回复
再UP一下,对象数组可以当参数传递吗?
happyhippy 2007-03-19
  • 打赏
  • 举报
回复

Visual Studio会自动在Reference.cs中添加类及其字段和属性的定义
直接用就可以吧,CLR会自动帮忙序列化和反序列化。

“问题是有些有3个在客户端可以直接引用,还有的就不行”,没看明白什么意思?
StrayFog 2007-03-19
  • 打赏
  • 举报
回复
有时间看看!
offer 2007-03-19
  • 打赏
  • 举报
回复
如果客户端是.net的开发的话是没有问题的,会在本地生成代理(c/s,b/s)都一样。其他客户端的话,就传递xml文本了。
yumanqing 2007-03-19
  • 打赏
  • 举报
回复
唉,周末大家都在休息,今天在UP一下
yumanqing 2007-03-17
  • 打赏
  • 举报
回复
昨天试验了一天,我在客户端把一张表自己手工构建成一篇XmlDocument,在传到webservice中,
[webMothed]
public void test(XmlDocument xmldoc)
{
//do something
}
在服务器端在自己解析,这样到也是实现了,就是不知道这种方法和dragonlus(毒龙)
的方法序列化成二进制数组那种方法更好?
jinanjiang 2007-03-16
  • 打赏
  • 举报
回复
up
jimh 2007-03-16
  • 打赏
  • 举报
回复
只有是输入参数或返回参数使用到的model你引用webservice后才可以自动生成相关代码,前端才可以使用相应的摸的拉,其它没相关的摸的拉是不可能使用到的
dragonlus 2007-03-16
  • 打赏
  • 举报
回复
若要在WebService 中使用自定義的MODEL,可以將MODEL序列化和反序列化操作.
方法:
//序列化
public byte[] SerializeObject(object pObj)
{
if (pObj == null)
return null;
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(memoryStream, pObj);
memoryStream.Position = 0;
byte[] read = new byte[memoryStream.Length];
memoryStream.Read(read, 0, read.Length);
memoryStream.Close();
return read;
}
//反序列化
public object DeserializeObject(byte[] pBytes)
{
object newOjb = null;
if (pBytes == null)
{
return newOjb;
}

System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(pBytes);
memoryStream.Position = 0;
BinaryFormatter formatter = new BinaryFormatter();
newOjb = formatter.Deserialize(memoryStream);
memoryStream.Close();

return newOjb;
}
liujia_0421 2007-03-16
  • 打赏
  • 举报
回复
这种情况可以通过序列化成二进制来传送,即:

不管是客户到服务器,还是服务器到客户端,传送时序列化成二进制数组,接收时再将二进制数组反序列化即可....

一个原则就是转成基本类型(比如int,string,byte)等类型后再传送...
yumanqing 2007-03-16
  • 打赏
  • 举报
回复
各位大哥,请指点呀

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧