none
在WCF服务中同时存在Datatable和Guid的类型,用svcutil生成代理后总是将Guid换为String类型,能否避免? RRS feed

  • 问题

  • 请教,在WCF服务中同时存在Datatable和Guid的类型,用svcutil生成代理后总是将Guid换为String类型,能否避免这种错误的转换?谢谢
    • 已编辑 袁源 2009年6月26日 8:53 courtesy
    2009年6月26日 8:18

答案

  • 是的,Guid 是作为标识。
    奇怪的是,如果服务中没有Datatable类型的话,Guid是可以正常地生成到代理中去,一旦有Datatable类型的话,就不行了。我怀疑Datatable的存在不光只影响到了Guid的序列化,很可能影响了许多系统类型的序列化

    DataTable和GUID都是.NET 的内建类型。DataTable的序列化使用的是.NET提供的格式化器。这个不能满足SOA的要求,所以WCF框架提供了自己的序列化机制。或许这个是一个原因吧~
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    • 已标记为答案 袁源 2009年6月29日 9:42
    2009年6月29日 4:53
    版主

全部回复

  • 请教,在WCF服务中同时存在Datatable和Guid的类型,用svcutil生成代理后总是将Guid换为String类型,能否避免这种错误的转换?谢谢

    GUID类型做什么用处?标识?
       你可以自己手写客户端代码。
    不过我怀疑是为了数据传输考虑的,或许数据发送不支持GUID类型,String 类型是可以通过XML传递的
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月26日 13:19
    版主
  • 是的,Guid 是作为标识。
    奇怪的是,如果服务中没有Datatable类型的话,Guid是可以正常地生成到代理中去,一旦有Datatable类型的话,就不行了。我怀疑Datatable的存在不光只影响到了Guid的序列化,很可能影响了许多系统类型的序列化
    • 已编辑 袁源 2009年6月29日 0:28 改错字
    2009年6月29日 0:25
  • 是的,Guid 是作为标识。
    奇怪的是,如果服务中没有Datatable类型的话,Guid是可以正常地生成到代理中去,一旦有Datatable类型的话,就不行了。我怀疑Datatable的存在不光只影响到了Guid的序列化,很可能影响了许多系统类型的序列化

    DataTable和GUID都是.NET 的内建类型。DataTable的序列化使用的是.NET提供的格式化器。这个不能满足SOA的要求,所以WCF框架提供了自己的序列化机制。或许这个是一个原因吧~
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    • 已标记为答案 袁源 2009年6月29日 9:42
    2009年6月29日 4:53
    版主
  • 谢谢版主的分析,原因确定如此。
    我也不想强求用Datatable这些类型的了,用对象数组来代替它们的功能。不过,如果有朋友能继续研究并解决DataTable的序列化的问题,期待共享哦。

    2009年6月29日 9:41
  • 谢谢版主的分析,原因确定如此。
    我也不想强求用Datatable这些类型的了,用对象数组来代替它们的功能。不过,如果有朋友能继续研究并解决DataTable的序列化的问题,期待共享哦。

    Datatable也是一个类型,不过包含了许多额外的信息,或许很都都是我们不需要的。如果要想在WCF框架下支持序列化的话,重新定义,按照数据契约的格式定义就可以了。一般没必要的,使用自己定义的数据契约就可以了,这样的话序列化效率也会高。
    呵呵,别客气啊,大家互相交流、互相学习。~
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月29日 12:59
    版主