关于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没写对。