WCF传递实体对象时,如果有DataTable 或DataSet返回类型,整个Service的其它兄弟方法 实体对象传递时,除字符型数据,其它DataTime或Int数据都会丢失。通过SvcConfigEditor和SvcTraceViewer跟踪日志时,发现3个字段,只传输了一个字符。
客户端代码:
1 TestServiceClient client = new TestServiceClient(); 2 User user = new User() { age=11,date=DateTime.Now,name="测试!"}; 3 DataTable dt = client.DoWork(user);
服务端代码:
1 public class TestService : ITestService 2 { 3 public DataTable DoWork(User user) 4 { 5 return new DataTable("test"); 6 7 } 8 9 } 10 [DataContract] 11 public class User 12 { 13 [DataMember] 14 public string name; 15 [DataMember] 16 public int age; 17 [DataMember] 18 public DateTime date; 19 }
1 [ServiceContract] 2 public interface ITestService 3 { 4 5 [OperationContract] 6 DataTable DoWork(User user); 7 8 }
http://www.c-sharpcorner.com/UploadFile/deepak.sharma00/how-to-return-a-datatable-from-wcf-service/
谢谢回复,但我要的不是解决获得dataTable,而是因为返回类型为DataTable 造成的传输User实体数据丢失问题
@Randy0528: 你试试不用User作为参数,使用其它类型除了String,看看是不是也是不行
@Yu: 不用实体对象,以下参数正常传输。
DataTable DoWork(string userName,int userId,DateTime date);
@Randy0528: 这个丢失数据跟用不用Datatable就没关系了,我这模拟了,不会有你说的情况
@Yu: 能否发一下你的解决方案代码?谢谢 randy0528@qq.com
@Randy0528: 查收
@Yu: 谢谢,我找到问题了。我在引用的时候,在高级里把 重新使用引用的程序集的类型 勾选去除了
说句废话:做接口时不要用datatable传值.
现成项目已经大量使用了。。。不知道为啥原项目没有一点问题。但如果我一更新引用接口。就报错!