我有一个生成Web服务的WSDL-fisrt方法。基本上,这意味着,我有一个手工制作的版本,我希望我的服务看起来如何,然后使用svcutil
生成WCF服务。
这个WSDL包含许多有用的信息,例如minOccurs,maxOccurs,limits(regexp)等。但是,当我获得自动生成的类时,这些信息完全丢失。
有没有什么方法可以在属性中捕获这些信息(无论是“标准”.net提供的还是自定义的),以便我可以在反序列化后对对象进行验证?
注意:我知道您可以通过服务行为和消息检查器对传入流执行验证,但我正在寻找一种解决方案,我可以对生成的代码执行验证,而无需编写我已经编写的复杂验证规则其他地方已定义。 (即,我不想重复)
答案 0 :(得分:1)
是的,您可以将WSDL中的任何信息转换为代码,但不一定使用svcutil。如果您遇到svcutil支持的限制,您可能需要考虑另一种代码生成机制,例如T4模板。
答案 1 :(得分:1)
通过在你的问题中引用“minOccurs,maxOccurs,restrictions(regexp)等”引用,听起来你主要关心的是在维护XSD元数据的同时将wsdl:types元素内容序列化为数据契约类。如果是这种情况,那么您可以尝试XSD.EXE command line tool从WSDL类型中提取的XSD中生成类。我不知道XSD实用程序如何强制执行XSD元数据/限制(如果有的话),但它将比SvcUtil生成的基于DataContractSerializer的类更能控制类结构。
更新: .NET XmlSerializer支持使用minOccurs and other attributes标记类,但该功能是原始基于ASMX的Web服务的一部分。我相信XmlSerializer仍然会尊重这些属性,即使它们是用于ASMX(YMMV)。