與 ASP.NET Web 服務的互通性
您可以藉由確定使用兩種技術所實作的服務都符合 WS-I Basic Profile 1.1 規格,以達到 ASP.NET Web 服務和 Windows Communication Foundation (WCF) Web 服務之間的互通性。符合 WS-I Basic Profile 1.1 的 ASP.NET 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 屬性讓訊息不根據 SOAPAction HTTP 標頭而根據 SOAP 訊息的本文項目完整名稱傳送到方法。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 應用程式的所有優點中得到更突出的效能。
請避免使用網際網路資訊服務 (IIS) 提供的驗證選項。WCF 用戶端並不支援這些選項。如果必須保護某個服務的安全,請使用 WCF 所提供的選項,因為這些選項都是依據標準通訊協定而建立,並且非常穩定好用。
因載入 ServiceModel HttpModule 而造成的效能影響
在 .NET Framework 3.0 中,WCF HttpModule 是安裝在根 Web.config 檔案中,以便讓每個 ASP.NET 應用程式都啟用 WCF。這可能會影響效能,所以,您可以移除 Web.config 檔的 ServiceModel,如下列範例所示。
<httpModules>
<remove name=”ServiceModel” />
<httpModules/>