与 ASP.NET Web 服务的互操作性

确保使用 ASP.NET Web 服务技术和 Windows Communication Foundation (WCF) Web 服务技术实现的服务符合 WS-I Basic Profile 1.1 规范,便可以实现这两种 Web 服务之间的互操作性。 通过使用 WCF 系统提供的绑定 BasicHttpBinding,符合 WS-I Basic Profile 1.1 的 ASP.NET Web 服务可与 WCF 客户端进行互操作。

使用 ASP.NET 2.0 选项,即将 WebServiceWebMethodAttribute 属性添加到接口而不是添加到类,并编写实现该接口的类,如下面的示例代码所示。

[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 标头来路由消息。

只要为 XML 显式定义了命名空间,则在默认情况下,XmlSerializer 将类型序列化为的 XML 与 DataContractSerializer 将类型序列化为的 XML 在语义上完全相同。 如果要定义用于 ASP.NET Web 服务的数据类型,并且预期采用 WCF,请执行以下操作:

  • 使用 .NET Framework 类而不是 XML 架构来定义该类型。

  • 仅将 SerializableAttributeXmlRootAttribute 添加到该类,使用后者显式定义类型的命名空间。 不要添加 System.Xml.Serialization 命名空间中的其他属性来控制如何将 .NET Framework 类转换为 XML。

  • 通过采用此方法,以后可将 .NET 类转换为附加了 DataContractAttributeDataMemberAttribute 的数据协定,而无需为了传输而对类序列化成的 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。 这可能会影响性能,因此,可以移除 Web.config 文件的 ServiceModel,如下面的示例所示。

<httpModules>  
    <remove name="ServiceModel" />  
</httpModules>

另请参阅