与 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 选项,即将 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 标头来路由消息。
只要为 XML 显式定义了命名空间,则在默认情况下,XmlSerializer 将类型序列化为的 XML 与 DataContractSerializer 将类型序列化为的 XML 在语义上完全相同。 如果要定义用于 ASP.NET Web 服务的数据类型,并且预期采用 WCF,请执行以下操作:
使用 .NET Framework 类而不是 XML 架构来定义该类型。
仅将 SerializableAttribute 和 XmlRootAttribute 添加到该类,使用后者显式定义类型的命名空间。 不要添加 System.Xml.Serialization 命名空间中的其他属性来控制如何将 .NET Framework 类转换为 XML。
通过采用此方法,以后可将 .NET 类转换为附加了 DataContractAttribute 和 DataMemberAttribute 的数据协定,而无需为了传输而对类序列化成的 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>