日期:2014-05-18  浏览次数:20971 次

关于wcf传递自定义对象,急,在线等,解决马上结贴
我刚开始做wcf,我看到网上的例子都是很简单的,我想能传递自己的类或结构我先把我的代码贴出来,希望高手帮我指导一下,
C# code

//服务的接口
[ServiceContract]
    public interface IWcfService
    { 
        //test
        [OperationContract]
        string GetData();
        [OperationContract]
        void Ret(out string str, out string str2);
        //上面两个函数都能正常调用,但下面需要返回ErrInfo 的自定义对象,就不知道怎么操作了,
        [OperationContract]
        DataTable GetDataTable(string strSql, out ErrInfo errInfo);
        [OperationContract]
        ErrInfo  GetDataTable();       
    }

 // 使用下面示例中说明的数据约定将复合类型添加到服务操作。
    [DataContract]
    public class ErrInfo
    {
        private short SignErr;
        private string StrErr;

        public ErrInfo(short signErr, string strErr)
        {
            SignErr = signErr;
            StrErr = strErr;
        }        

        [DataMember]
        public short signErr
        {
            get
            {
                return SignErr;
            }
            set
            {
                SignErr = value;
            }
        }
        [DataMember]
        public string strErr
        {
            get
            {
                return StrErr;
            }
            set
            {
                StrErr = value;
            }
        }


//函数的实现我就不贴了,没得问题,下面是客服端的接口
[ServiceContract]
    public interface IWcfService
    {
        //[OperationContract]
        //string GetData();
        [OperationContract]
        string GetDataB();
        [OperationContract]
        void Ret(out string str,out string str2); 
        //这里我不知道怎么写返回对象函数的接口  
    }

 private void btnA_Click(object sender, EventArgs e)
        {
            string str, str2;
            server.Ret(out str, out str2);//所以也没办法调用,希望高手指点
            MessageBox.Show(str2);
        }





------解决方案--------------------
WCF中不建议使用OUT REF等。这类意义是传的是引用地址。但是WCF的通信跨了进程。内存引用地址没有意义了。
------解决方案--------------------
推荐多用用,而不是不建议,因为这样可以解决多个返回值的问题。
对于OUT关键字,其实微软默认对有返回值的函数,都改造成了OUT关键字的Void函数了。而REF关键字也完全支持,没任何问题,只不过这时传入和传出的是2个不同的对象,非同一个对象引用。

~~~~~~~1234期待测试结果
------解决方案--------------------
1、可以使用返回值(定义返回值的类,包含DataTable及你这个要out ref的字段)
2、可以使用回调的方式把值回调给对方。
------解决方案--------------------
我没看到你的server是啥——“ErrInfo errInfo= server.GetErr();”
你这里凭空跑出一个server来,我只能认为你这类的server是对的,如果得不到任何内容,说明server有问题,但是你始终没给出客户端完整代码,另外我在你的另外一个帖子里给你例子了,你自己不看,完整的示例代码都有,自己下载了分析比较,你的server没写对。