启动Contract First WCF或Web Service的最佳方式是什么?

时间:2014-04-10 22:53:51

标签: c# xml web-services wcf xsd

我已经获得了一个WSDL文件和几个XSD文件来构建一个Web服务。现在,我正试图让它设置为接收请求并做出响应。

我对WebServices的体验仅限于带有asmx文件等的旧asp版本。

XSD文件中有很多信息,我不想手工构建这些类,我也不知道究竟是什么意思(我想象的只是一个xml)可序列化的课程,但没有考虑过它。)

我从哪里开始?我调查了WCF,但它对我来说完全陌生,所以我更倾向于使用旧式,但我很难找到有关如何设置或开始自动生成类的任何信息来自XSD文件。

我确实尝试了一下WCF,但是当我尝试生成WebService代码时,WSCF blue给了我错误(Cannot import wsdl:portType)。并且svcutil.exe会生成部分的XSD文件信息,但由于某种原因而不是全部。

所以有两个问题:

  1. 如何从XSD文件生成一些存根类以实现此目的

  2. 从WSDL生成WCF服务的教程/演练以及使用wscf blue的多个XSD文件?

3 个答案:

答案 0 :(得分:4)

假设您有一个WSDL,您可以执行以下操作。我的任务是在现有Web服务之上实现中间调度层。新服务应公开与原始服务相同的接口,但在内部执行不同的功能。请注意,我正在谈论"经典"这里的WCF服务(基于SOAP)。

步骤1:从WSDL

创建服务接口的代码
wsdl.exe /si /out:<targetfolder> <url-to-wsdl>

这将生成一个.cs文件,其中包含接口和其他数据类型(用于传输对象)。请注意,此文件尚未准备好WCF,因为wsdl.exe似乎假设您要创建旧的.asmx服务。

第2步:将界面代码导入项目

将生成的文件添加到项目中。添加用于使接口及其操作准备好WCF的属性。您需要将[ServiceContract]添加到接口,并将[OperationContract]添加到操作。

第3步:创建WCF服务

创建WCF服务(.svc文件)并删除生成的接口。相反,使服务从生成的接口实现合同。现在,您可以实现新功能。

第4步:调整剩余的绑定,身份验证设置等以匹配原始网络服务。

答案 1 :(得分:1)

您可以使用svcutil.exe从wsdl和xsd文件为服务设置的客户端部分生成代理.cs类和app.config文件。

以下是一个cmd,它将从visual studio cmd行生成一个代理:

svcutil.exe c:\OutputFolder\ /o:serviceproxy.cs /config:app.config "C:\WSDL And XSD Folder\*.wsdl" "C:\WSDL And XSD Folder\*.xsd"

答案 2 :(得分:0)