给定wsdl + xsd类型文件,如何创建存根WCF Web服务?

时间:2010-01-23 14:17:00

标签: wcf web-services wsdl stubbing

我知道这是一个基本主题,但在从wsdl开始之前从未这样做过。

我正在传递一个wsdl文件和一堆带有类型定义的xsd。我不知道它们是否是从WCF服务创建的(我猜是因为拆分格式)但我确实需要创建一个实现合同的WCF服务。

问题:如何获得服务合同界面?

我知道wsdl.exe和svcutil.exe - 但不太熟悉什么是什么。 我想在那之后剩下的就是实施服务合同了。

任何帮助表示赞赏!

P.S。我有另外一个问题,但是我试图在同一个问题中加入太多东西 - 所以现在让它保持简单。

1 个答案:

答案 0 :(得分:13)

您有两种选择:

选项1:在命令行中使用svcutil.exe实用程序。它应该安装在C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin目录(或类似的东西,具体取决于您拥有的机器和操作系统)

使用svcutil - ?为所有众多参数的列表。基本上,以最简单的形式,使用:

svcutil  (name of your service).wsdl (name of your datafile).xsd

这将创建一个包含服务和数据协定的相应(name of your service).cs C#文件以及一个示例配置文件。

生成的* .cs文件(或* .vb,如果你想要VB.NET)将包含服务契约(由WSDL产生的方法)和数据契约(数据部分,来自XSD)为您服务。

选项2:使用Visual Studio中的“添加服务引用”对话框(在解决方案资源管理器的“引用”节点上),然后输入WSDL文件的文件名:

Add Service Reference dialog

这将创建一个服务引用,它与svcutil.exe实用程序的输出基本相同 - 加上一些Visual Studio的帮助程序类和文件。

不幸的是,在这两种情况下,导入都会创建一个可怕的重载配置文件,这可能是许多程序员认为WCF非常复杂的原因之一 - 实际上并非如此,但这两个导入工具只是做了一个非常糟糕的工作为你创建基本配置....不要让你吓跑你!

如果WSDL的“添加服务引用”未自动转换所有相关且必需的XSD文件,则可能需要将这些文件添加到项目中,然后使用XSD2Code之类的内容将这些文件转换为C#(或VB.NET)类为您服务。

wsdl.exe是不推荐使用的实用程序,用于将WSDL文件转换为ASMX(ASP.NET Web服务)存根 - 不再使用它,使用svcutil.exe或Visual Studio为WCF添加服务引用

至于如何创建适当且最小的WCF配置,请查看名为Extreme WCF的Miguel Castro的DotNet Rocks电视节目#122。 Miguel提供了一种很好的方法来构建你的WCF项目,并创建真正需要的配置(因此可以比svcutil生成的混乱更好地理解)。