SvcUtil.exe的替代?

时间:2010-01-12 00:12:14

标签: wcf svcutil.exe

我一整天都在和SvcUtil搏斗,试图让它为一些IMS企业服务(主要是集团管理服务生成有用的代码,但是还有其他我们需要它也可以用来工作。)你可以找到IMS服务WSDL在这里http://www.imsglobal.org/es/index.html

我得出的结论是,SvcUtil是微软的一个无用的事后想法,它甚至不支持WSDL和XSD标准。它无法生成符合IMS使用和同时运行的标准WSDL协定的WCF服务。尽管从以下WSDL(http://www.imsglobal.org/services/gms/wsdl/imsGroupManServiceSync_v1p0.wsdl)生成可编译代码,但是从WCF服务(?wsdl,?wsdl = wsdl0,?xsd = xsd0等)观察生成的WSDL表明没有任何操作存在,并且WCF实际上只识别代码中生成的一小部分类型。如果我们使用生成的代码,我们可以获得某种功能(我们使用SoapUI进行测试),但它不再符合合同,因此对真正需要调用这些服务的人来说它是无用的。 / p>

SvcUtil还有其他选择吗? (请不要建议使用内置的Visual Studio“添加服务引用”工具,这与使用与SvcUtil完全相同的代码一样无用。)我们需要一些可以给我们学位的东西控制如何从WSDL协定生成代码,每个部分最终进入哪些文件,每个代码元素最终进入哪些命名空间等等.IMC合同导入特定于WSDL中定义的服务的两种XSD类型,以及所有IMS服务通用的XSD类型。我们需要能够为这些类型生成不同的程序集,并在生成的代码中引用它们(类似于SvcUtil显然应该如何执行它...但它似乎没有按照它所说的文档所说的那样做完全没有。)

到目前为止,我一直是WCF的忠实粉丝。当你只使用.NET / WCF服务时,它显然有效,但是当你尝试在符合标准的跨平台环境中使用它时,一切都变得糟透了。

2 个答案:

答案 0 :(得分:10)

您是否看过Codeplex上的WCF Proxy Generator?根据它背后的人(Kate Gregory和Michele Leroux Bustamante),希望它可能有用 - 而且你得到了消息来源,所以你可以根据自己的内容进行调整/调整!

(我没有时间认真看待它自己 - 然而 - 这是无休止的“To-do,当我绕过它”清单......)

另外,请查看此blog post here by Pedram Rezaei,了解如何使用您自己的自定义代码影响Visual Studio“添加服务引用”步骤。

答案 1 :(得分:8)

很抱歉,我没有足够的时间回复此问题,但您的问题有答案。你可以实现一个名为IWsdlImportExtension的接口,它有两个你会感兴趣的方法。它们是:

GenerateContract()和GenerateOperation()

如果实现这些方法,您实际上可以通过添加或删除CustomAttributes等来控制SvcUtil泵出代码的方式。您需要使用其中的接口编译一个dll,然后将SvcUtil配置指向DLL和接口。

使用此方法,您可以将Xml文档添加到输出的代理等等。关于此,有一些感兴趣的文章。