我有一个项目,它依赖于Oracle Hosted Web服务(而不是WCF)。我有一份服务及其相关XSD的WSDL副本。
为此生成代理和数据合成程序集的正确方法是什么?
我从
开始XSD.exe /c /language:CS user.xsd
对于我的每个xsds。这会生成一堆具有共享类型违规的类对象(所有类中的相同对象),因此我修剪了所有重复项,因此它们具有单个声明。
然后使用我的类文件“datacontracts.dll”构建该程序集
然后我生成了我的服务客户端
svcutil.exe user.wsdl /n*:SomeNameSpace /r:datacontracts.dll /noconfig
但是这似乎并没有给出我想要的东西,因为它仍然导致了服务客户端内所有类的重复。
在从XSD生成的类中,我注意到每个类定义都有
[XmlType(Namespace = "urn:/crmondemand/xml/...")]
我是否需要将该属性放置在重复的类中,以便在我将其作为单数类的每个类中重复出现一次?所以我会
[XmlType(Namespace = "urn:/crmondemand/xml/user")]
[XmlType(Namespace = "urn:/crmondemand/xml/campaign")]
[XmlType(Namespace = "urn:/crmondemand/xml/lead")]
public class SharedClass
或者我是否接近这个错误?
答案 0 :(得分:1)
首先警告......你可能知道 - 但是如果你不这样做我肯定会说修剪生成的代码是灾难的秘诀......
至于重用类型 - 我自己从来没有发现Microsoft堆栈在这方面特别好......虽然有两条思路......一个说“所有网络服务” - 就其本质而言 - 是单独的实体......因此 - 发出的所有代码仅在该一个Web服务中有效。
我发现这是令人难以置信的短视。我更喜欢重用任何类型的东西......但是对于.NET我发现这很难...我发现最接近的是一个名为WSCF的工具。它做了一些我真正喜欢的好事,比如为每个类发出单独的cs文件。这使得从其他来源“覆盖”它们 - 只要源生成可序列化的等价物 - 非常容易......
我对WSCF的问题(经典的想法)是它没有“xml命名空间”到“c#namespace”映射...我实际上必须自己添加到工具...(我试过把它交还给项目,但从未悲伤地回复过来)
所以我会告诉你尝试WSCF.blue(目标WCF)或查看WCF经典。你可以在codeplex上找到它们。
希望能帮到你..
答案 1 :(得分:0)
以下是否按预期工作?
svcutil *.wsdl *.xsd /language:C#