ASP.NET Web 服务和 Windows Communication Foundation (WCF) Web 服务之间的互作性可以通过确保使用这两种技术实现的服务符合 WS-I 基本配置文件 1.1 规范来实现。 ASP.NET 符合 WS-I 基本配置文件 1.1 的 Web 服务使用 WCF 系统提供的绑定 BasicHttpBinding与 WCF 客户端互作。
使用 ASP.NET 2.0 选项,将WebService和WebMethodAttribute属性添加到接口而不是类,并编写类来实现该接口,如以下示例代码所示。
[WebService]
public interface IEcho
{
[WebMethod]
string Echo(string input);
}
public class Service : IEcho
{
public string Echo(string input)
{
return input;
}
}
首选使用此选项,因为带有该属性的WebService接口构成了服务执行操作的合同,这些操作可以在可能以不同方式实现同一合同的各种类中重复使用。
避免使用 SoapDocumentServiceAttribute 特性依据 SOAP 消息正文元素的完全限定名称将消息路由到方法,而应使用 SOAPAction
标头。 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 提供的选项,因为这些选项可靠且基于标准协议。
加载 ServiceModel HttpModule 导致的性能影响
在 .NET Framework 3.0 中,WCF HttpModule
安装在根 Web.config 文件中,以便每个 ASP.NET 应用程序都已启用 WCF。 这可能会影响性能,因此可以删除 ServiceModel
Web.config 文件,如以下示例所示。
<httpModules>
<remove name="ServiceModel" />
</httpModules>