【问题标题】:Can I include custom attributes on auto-generated WCF classes?我可以在自动生成的 WCF 类中包含自定义属性吗?
【发布时间】:2011-07-07 16:30:49
【问题描述】:

我有一个 WSDL-first 方法来生成 Web 服务。基本上,这意味着,我有一个我想要的服务外观的手工版本,然后使用svcutil 生成 WCF 服务。

此 WSDL 包含许多有用的信息,例如 minOccurs、maxOccurs、限制 (regexp) 等。但是,当我获取自动生成的类时,这些信息完全丢失了。

有什么方法可以在属性的注释(无论是“标准”.net 提供的还是自定义的)中捕获这些信息,以便在对象被反序列化后对其执行验证?

注意:我知道您可以通过服务行为和消息检查器对传入流执行验证,但我正在寻找一种解决方案,我可以对生成的代码执行验证,而无需编写我已经编写的复杂验证规则已经在别处定义了。 (即,我不想重复)

【问题讨论】:

    标签: .net wcf wsdl


    【解决方案1】:

    是的,您可以将 WSDL 中的任何信息转换为代码,但不一定要使用 svcutil。如果您遇到了 svcutil 支持的限制,您可能需要考虑另一种代码生成机制,例如 T4 模板。

    【讨论】:

    • 通过采用 T4 方法,我是否真的需要遍历整个 wsdl/xsds 才能获得这些属性?您是否知道任何可以执行此类操作的示例模板?
    • 使用 T4 方法,您需要重新实现整个 WSDL 来生成代码,所以,是的,您需要遍历整个 WSDL 源代码。对于示例模板,请尝试google.com/search?q=t4+wsdl
    【解决方案2】:

    通过在您的问题中引用“minOccurs、maxOccurs、限制(正则表达式)等”,听起来您主要关注将 wsdl:types 元素内容序列化为数据协定类,同时维护 XSD 元数据。如果是这种情况,那么您可以尝试使用XSD.EXE command line tool 从从 WSDL 类型中提取的 XSD 生成类。我不知道 XSD 实用程序如何强制执行 XSD 元数据/限制(如果有的话),但与 SvcUtil 生成的基于 DataContractSerializer 的类相比,它可以让您更好地控制类结构。

    更新: .NET XmlSerializer 确实支持使用 minOccurs and other attributes 标记类,但该功能是原始基于 ASMX 的 Web 服务的一部分。我相信 XmlSerializer 仍然会尊重这些属性,即使它们旨在供 ASMX 使用 (YMMV)。

    【讨论】:

    • 但是,从框架的第 4 版开始,他的 XmlSerializer(根据您的链接)现在被标记为“旧版技术”,我不想将新代码基于已经存在的东西标记为已弃用。
    • 这可以理解,但这是 Microsoft 提供的唯一可用于执行您想要的操作的工具。请记住,WCF 提供了一个消息传递抽象,其中soap(由WSDL 定义)是一个实现细节。如果您想在 XSD 级别工作,那么 XmlSerializer 将为您提供该功能。这并不意味着您必须放弃 WCF,您只需要控制代表服务数据协定的类。 WCF fully supports using XmlSerializer 基于类。
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2012-07-18
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2012-11-16
    相关资源
    最近更新 更多