共用方式為


與 ASP.NET Web 服務的互通性

若要在 ASP.NET Web 服務和 Windows Communication Foundation (WCF) Web 服務之間實現互通性,請確定使用兩種技術所實作的服務都符合 WS-I Basic Profile 1.1 規格。 符合 WS-I Basic Profile 1.1 的 ASP.NET Web 服務可以透過 WCF 系統提供的繫結 BasicHttpBinding 來與 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 標頭來傳送訊息。

根據預設,XmlSerializer 序列化型別的目標 XML 在語意上與 DataContractSerializer 序列化型別的目標 XML 是一樣的 (前提是 XML 的命名空間已明確定義)。 在定義要搭配 ASP.NET Web 服務使用的資料型別以採用 WCF 時,請執行下列動作:

  • 使用 .NET Framework 類別,而不是 XML 結構描述來定義型別。

  • 僅將 SerializableAttributeXmlRootAttribute 新增至類別,並使用後者明確定義該型別的命名空間。 請勿從 System.Xml.Serialization 命名空間新增額外的屬性來控制如何將 .NET Framework 類別轉譯為 XML。

  • 採用這個方法之後,您稍後應該可以藉由新增 DataContractAttributeDataMemberAttribute,將 .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。 這可能會影響效能,所以,您可以移除 Web.config 檔的 ServiceModel,如下列範例所示。

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

另請參閱