如果今天使用 ASP.NET,并预计将来使用 WCF,本主题提供了指导,以确保新的 ASP.NET Web 服务能够与 WCF 应用程序协同工作。
常规建议
对于任何新服务,请采用 ASP.NET 2.0。 这样做将提供对新版本的改进和增强功能的访问权限。 但是,它还允许在同一应用程序中将 ASP.NET 2.0 组件与 WCF 组件一起使用。
协议
使用 ASP.NET 2.0 的新功能验证是否符合 WS-I 基本概要 1.1:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(
ConformsTo = WsiProfiles.BasicProfile1_1,
EmitConformanceClaims=true)]
public interface IEcho
ASP.NET 符合 WS-I 基本配置文件 1.1 的 Web 服务将使用 WCF 预定义绑定 BasicHttpBinding与 WCF 客户端互作。
服务开发
避免使用 SoapDocumentServiceAttribute 特性依据 SOAP 消息正文元素的完全限定名称将消息路由到方法,而应使用 SOAPAction HTTP 标头。 WCF 使用 SOAPAction HTTP 标头来路由消息。
数据表示形式
默认情况下,XmlSerializer 序列化类型的 XML 在语义上与 DataContractSerializer 序列化类型的 XML 相同,前提是 XML 的命名空间被显式定义。 定义用于 ASP.NET Web 服务中的数据类型时,在预计将来采用 WCF 的情况下,请执行以下步骤:
使用 .NET Framework 类而不是 XML 架构定义类型。
仅将 SerializableAttribute 和 XmlRootAttribute 添加到类中,使用后者显式定义类型的命名空间。 不要从 System.Xml.Serialization 命名空间中添加其他属性,以控制如何将 .NET Framework 类转换为 XML。
通过采用此方法,您应该能够稍后通过添加 DataContractAttribute 和 DataMemberAttribute,将 .NET 类转换为数据契约,而无需显著更改用于传输的序列化 XML。 ASP.NET Web 服务在消息中使用的类型将能够作为 WCF 应用程序的数据协定进行处理,这不仅可以提高 WCF 应用程序的性能,还带来其他优势。
安全
避免使用 Internet Information Services 提供的身份验证选项(IIS)。 WCF 客户端不支持它们。 如果需要保护服务,请使用 WCF 提供的选项,因为这些选项更丰富,并且基于标准协议。