我整天都在与 SvcUtil 搏斗,试图让它为一些 IMS 企业服务(主要是组管理服务,但还有其他我们需要它来工作)生成有用的代码。你可以在这里找到 IMS 服务 WSDL http://www.imsglobal.org/es/index.html。
我得出的结论是,SvcUtil 是微软的一个无用的事后想法,即使是半途而废的方式也不支持 WSDL 和 XSD 标准。它无法生成符合 IMS 同时使用的标准 WSDL 合同的 WCF 服务 AND 功能。尽管从以下 WSDL ( http://www.imsglobal.org/services/gms/wsdl/imsGroupManServiceSync_v1p0.wsdl),观察从 WCF 服务生成的 WSDL(?wsdl、?wsdl=wsdl0、?xsd=xsd0 等)表明不存在任何操作,并且只有一小部分在代码中生成的类型被实际识别由 WCF 提供。如果我们搞砸生成的代码,我们可以得到某种功能(我们正在使用 SoapUI 进行测试),但它不再符合合同,所以它对真正需要调用这些服务的人来说毫无用处。
SvcUtil 有什么替代品吗?(请不要建议使用内置的 Visual Studio“添加服务引用”工具,因为它使用与 SvcUtil 完全相同的代码。)我们需要一些能够让我们在一定程度上控制代码生成方式的工具从 WSDL 合同中,每个部分最终在什么文件中,每个代码元素在哪些命名空间中结束,等等。IMS 合同导入特定于 WSDL 中定义的服务的 XSD 类型,以及所有通用的 XSD 类型IMS 服务。我们需要能够为这些类型生成不同的程序集,并在生成的代码中引用它们(类似于 SvcUtil 显然应该这样做......但它似乎并没有按照它的文档所说的那样做完全没有。)
到目前为止,我一直是 WCF 的忠实粉丝。当您仅使用 .NET/WCF 服务时,它显然可以工作,但任何时候您尝试在符合标准的跨平台环境中使用它时,一切都会变得糟糕。