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不是很熟悉。
现请做过这样的各位大哥请指点,谢谢,分是小问题。咱是爽快人。

解决方案 »

  1.   

    若要在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;
            }
      

  2.   

    只有是输入参数或返回参数使用到的model你引用webservice后才可以自动生成相关代码,前端才可以使用相应的摸的拉,其它没相关的摸的拉是不可能使用到的
      

  3.   

    这种情况可以通过序列化成二进制来传送,即:不管是客户到服务器,还是服务器到客户端,传送时序列化成二进制数组,接收时再将二进制数组反序列化即可....一个原则就是转成基本类型(比如int,string,byte)等类型后再传送...
      

  4.   

    昨天试验了一天,我在客户端把一张表自己手工构建成一篇XmlDocument,在传到webservice中,
    [webMothed]
    public void test(XmlDocument xmldoc)
    {
    //do something
    }
    在服务器端在自己解析,这样到也是实现了,就是不知道这种方法和dragonlus(毒龙)
    的方法序列化成二进制数组那种方法更好?
      

  5.   

    如果客户端是.net的开发的话是没有问题的,会在本地生成代理(c/s,b/s)都一样。其他客户端的话,就传递xml文本了。
      

  6.   


    Visual Studio会自动在Reference.cs中添加类及其字段和属性的定义
    直接用就可以吧,CLR会自动帮忙序列化和反序列化。“问题是有些有3个在客户端可以直接引用,还有的就不行”,没看明白什么意思?
      

  7.   

    我的webservice端和客户端是同时写的,我一边再 webservice 中添加类,一边再客户端更新web引用,可就是最后添加的一个实体类引用不到,只是不明白,我试过把web引用删除重新引用的,还是不行,有谁遇到过吗?分是小事情
      

  8.   

    好久没来了,以前没说清楚,我是这么解决的,Webservice返回业务对象序列化后的xml格式字符串,到客户段后返序列化为对象进行显示处理。你可以自定义一个xml包,这样基本上所有的操作在WebService可以只用一个方法作为入口。
    example:
    [WebMethod]
    public string Do(string objString)
    {
      
      //1、从包头获取是要进行何种类型的操作,以及对象的类型
      //2、将包体反序列化为对象
      //3、对象操作,如增,删,改
      return str;
    }客户段也需要有对象序列化和反序列化的相关方法,你可以弄一个工具类。