【发布时间】:2011-12-20 10:29:13
【问题描述】:
我有一个 WCF 服务来回传递以下 DataContract:
[数据合约] 公共类 RequestWrapper { [数据成员] 公共 FooDataContract FooDataContract; } [数据合约] 公共类 ResponseWrapper { [数据成员] 公共 FooDataContract FooDataContract; } [数据合约] 公共类 FooDataContract { 公共 FooDataContract(字符串数据,Guid id) { 数据=数据; 身份证=身份证; } [数据成员] 公共字符串数据 { 获取;放; } [数据成员] 公共指导 ID { 获取;放; } }它是通过这样的代理类调用的:
无效呼叫服务(字符串数据) { var id = Guid.NewGuid(); var response = proxy.CallService(new RequestWrapper { 新的 FooDataContract(数据,ID); }); }然后使用 EF 通过存储库将其传递(通过服务)到数据库:
公共无效回购方法(FooDataContract foo) { var guid = foo.ID; // - 这里的断点显示全零! efContext.DoSomething(foo.Data, foo.ID); }这是服务调用:
公共 ResponseWrapper CallService(RequestWrapper 请求) { var foo = request.FooDataContract; 存储库.RepoMethod(foo); var response = new ResponseWrapper{ FooDataContract = foo }; 返回响应; }这是代理:
公共类代理:IMyService { 静态只读 ChannelFactory我已经在 VS 调试器中监视了 Guid。当从客户端 Web 应用程序调用服务时,生成的 Guid 是看似随机的十六进制字符的有效 Guid。太好了,这行得通。
但是当数据被序列化、通过网络并从另一端(在我的存储库中)出来时,Guid 全部为零!
我已经两次、三次检查 Guid 是否确实标记有 [DataMember] 属性。我想知道 DataContract 的额外层(如何用 RequestWrapper 数据合约包装 FooDataContract)是否会导致序列化问题?
【问题讨论】:
-
能否提供您的 WCF 服务中调用 repo 方法的代码?
标签: c# .net wcf serialization guid