如何:检索元数据并实现兼容服务。
通常,设计和实现服务并不是由同一个人完成的。在交互操作应用程序很重要的环境中,可以用 Web 服务描述语言 (WSDL) 设计或描述协定,而且开发人员必须实现一个与所提供的协定相兼容的服务。您可能还需要将现有服务迁移到 Windows Communication Foundation (WCF),但保留连网格式。此外,双工协定还需要调用方实现一个回调协定。
在这些情况下,必须使用ServiceModel Metadata Utility Tool (Svcutil.exe)(或等效工具)通过可以实现的托管语言生成服务协定接口,以满足协定的要求。通常情况下,ServiceModel Metadata Utility Tool (Svcutil.exe) 用于获取一个服务协定,该服务协定与通道工厂或 WCF 客户端类型以及设置正确的绑定和地址的客户端配置文件一起使用。若要使用生成的配置文件,则必须将其更改到服务配置文件中。您可能还需要修改服务协定。
检索数据并实现兼容服务
对元数据文件或元数据终结点使用ServiceModel Metadata Utility Tool (Svcutil.exe) 以生成代码文件。
搜索输出代码文件中包含相关接口的部分(以防存在多个接口),此接口是用 System.ServiceModel.ServiceContractAttribute 属性标记的。下面的代码示例演示由ServiceModel Metadata Utility Tool (Svcutil.exe) 生成的两个接口。第一个 (
ISampleService
) 是服务协定接口,实现它可创建兼容服务。第二个 (ISampleServiceChannel
) 是帮助器接口,客户端使用它可同时扩展服务协定接口和 System.ServiceModel.IClientChannel,且该接口可用于客户端应用程序。如果 WSDL 未指定所有操作的答复操作,则生成的操作协定可能会将 ReplyAction 属性设置为通配符 (*)。移除该属性设置。否则,当您实现服务协定元数据时,将不能为这些操作导出元数据。
实现类上的接口并承载服务。有关示例,请参见如何:实现 Windows Communication Foundation 服务协定,或参见下面“示例”部分中的简单实现。
在由ServiceModel Metadata Utility Tool (Svcutil.exe) 生成的客户端配置文件中,将 <client> 配置部分更改为 <services> 配置部分。(有关生成的客户端应用程序配置文件的示例,请参见下面的“示例”部分。)
在 <services> 配置部分中,在服务实现的 <services> 配置部分创建 name 属性。
将服务的 name 属性设置为服务实现的配置名称。
将使用实现的服务协定的终结点配置元素添加到服务配置部分。
示例
下面的代码示例演示通过对元数据文件运行ServiceModel Metadata Utility Tool (Svcutil.exe) 而生成的大部分代码文件。
下面的代码演示:
- 实现时符合协定要求的服务协定接口 (
ISampleService
)。 - 客户端所使用的帮助器接口,可用于同时扩展服务协定接口和 System.ServiceModel.IClientChannel,并可用于客户端应用程序 (
ISampleServiceChannel
)。 - 扩展 System.ServiceModel.ClientBase 的帮助器类,可用于客户端应用程序 (
SampleServiceClient
)。 - 从服务生成的配置文件。
- 简单的
ISampleService
服务实现。 - 客户端配置文件到服务器端版本的转换。