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

确保使用 ASP.NET Web 服务技术和 Windows Communication Foundation (WCF) 服务技术实现的服务符合 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 HTTP 标头。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 信息服务 (IIS) 提供的身份验证选项。WCF 客户端不支持这些选项。如果必须保护服务,请使用 WCF 提供的选项,因为这些选项是可靠的,它们基于标准协议。

由加载 ServiceModel HttpModule 而导致的性能影响

在 .NET Framework 3.0 中,WCF HttpModule 安装在根 Web.config 文件中,因此,每个 ASP.NET 应用程序都启用了 WCF。这可能会影响性能,因此,可以移除 Web.config 文件的 ServiceModel,如下面的示例所示。

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

另请参见

任务

如何:配置 WCF 服务以便与 ASP.NET Web 服务客户端进行互操作