【问题标题】:DataContract create in WCF在 WCF 中创建 DataContract
【发布时间】:2010-08-20 15:57:43
【问题描述】:

在客户端,我有这个类没有[DataContract]

public class UserEntity
    {
        public string login;
        public string password;
    }

当我在 WCF 端输入[DataContract] 并刷新该类的引用时,我无法启动 Web 服务。它说一个错误:

无法创建元数据...

怎么了?

【问题讨论】:

  • 您是否也将 [DataMember] 添加到您的公共字段?要么关闭所有属性,然后 DataContractSerializer 的行为很像旧的 XmlSerializer - 或者如果你开始添加属性,你必须将它们全部添加 - 你不能只是混合和匹配并添加一些属性....
  • 具有DataContract 属性的类将在 WCF 服务中定义。引用服务后,您可以实例化您的类并来回传递它。
  • 此实体在客户端的 WCF 类库中,没有编译器错误。我只是将 [DataContract] 放在“公共类 UserEntity”之上 有什么问题吗?我是否也必须将 [DataMember] 放在属性旁边?谢谢。
  • 我尝试输入 [DataMember] 但没有成功...“无法获取元数据...”
  • @Alan:您需要对您的 服务 进行更新,然后更新您的客户端 - 客户端的更新并不能真正被识别,并且可能导致客户端和服务器不同步。

标签: c# wcf datacontract


【解决方案1】:

你确定你真的知道,为什么你不能刷新参考?我的意思是你添加 [DataMember] - 它失败了,你删除它 - 它有效吗?或者它几天前有效,现在您添加了 [DataMember](和许多其他内容),但现在无效?

但无论如何,解决“刷新引用”问题的最简单方法 - 使用 SvcUtil.exe 手动刷新引用。在这种情况下,错误消息将更能描述简单的“哎呀!错误!”。

【讨论】:

  • 是的,我很确定只有当我添加 [DataContract] 时,它才会给出错误。但是我已经通过将实体放在 WCF 端来解决。但在 WCF 方面,我无法为实体创建库和为 DAO 创建库。这很常见吗?
  • 您可能会再次“崩溃”它并尝试使用 SvcUtils 刷新引用。它告诉你,有什么问题。在我的应用程序中,我为服务器和客户端使用共享程序集(我知道,这不是真正的 SOA 方式,但对我来说更容易)......但也许我不明白你对“实体库”的立场:)
【解决方案2】:

在您的情况下,客户端和服务器端是什么? WCF 端的刷新参考是什么?您的描述非常罕见。下面介绍如何创建具有复杂数据类型和 WCF 类库的服务:

  • 创建 WCF 类库
  • 向类库添加数据协定
  • 向类库添加服务
  • 在类库中实现服务契约和服务
  • 添加宿主项目
  • 从宿主项目中引用 WCF 类库
  • 宿主项目中类库的宿主服务
  • 将元数据端点添加到您的托管服务
  • 创建客户项目
  • 在 Visual Studio 之外运行宿主项目
  • 使用添加服务引用在宿主项目中托管的 WCF 服务上创建代理
  • 实现代码以通过创建的代理调用您的服务

如您所见,客户端没有修改数据协定,也没有刷新 WCF 服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多