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 クライアントと相互運用できます。
次のサンプル コードに示すように、 WebService 属性と WebMethodAttribute 属性をクラスではなくインターフェイスに追加し、インターフェイスを実装するクラスを記述する、ASP.NET 2.0 オプションを使用します。
[WebService]
public interface IEcho
{
[WebMethod]
string Echo(string input);
}
public class Service : IEcho
{
public string Echo(string input)
{
return input;
}
}
WebService属性を持つインターフェイスは、同じコントラクトをさまざまな方法で実装する可能性のあるさまざまなクラスで再利用できるサービスによって実行される操作のコントラクトを構成するため、このオプションを使用することをお勧めします。
SoapDocumentServiceAttribute属性を使用して、 HTTP ヘッダーではなく、SOAP メッセージの本文要素の完全修飾名に基づいてメソッドにメッセージをルーティングしないようにします。 WCF は、メッセージのルーティングに SOAPAction
HTTP ヘッダーを使用します。
既定で XmlSerializer が型をシリアル化する XML は、XML の名前空間が明示的に定義されていれば、 DataContractSerializer が型をシリアル化する XML と意味的に同じです。 ASP で使用するデータ型を定義する場合。WCF の導入を想定した NETWeb サービスでは、次の操作を行います。
XML スキーマではなく .NET Framework クラスを使用して型を定義します。
クラスに SerializableAttribute と XmlRootAttribute のみを追加し、後者を使用して型の名前空間を明示的に定義します。 .NET Framework クラスを XML に変換する方法を制御するために、 System.Xml.Serialization 名前空間から属性を追加しないでください。
このアプローチを採用することで、後で .NET クラスをデータコントラクトに変換し、DataContractAttribute と DataMemberAttribute を追加しても、クラスが転送のためにシリアル化される XML を大幅に変更することなく済むはずです。 ASP.NET Web サービスによってメッセージで使用される型は、WCF アプリケーションによってデータ コントラクトとして処理でき、WCF アプリケーションのパフォーマンスが向上します。
インターネット インフォメーション サービス (IIS) によって提供される認証オプションは使用しないでください。 WCF クライアントではサポートされていません。 サービスをセキュリティで保護する必要がある場合は、WCF によって提供されるオプションを使用します。これらのオプションは堅牢であり、標準プロトコルに基づいているためです。
ServiceModel HttpModule の読み込みによるパフォーマンスへの影響
.NET Framework 3.0 では、ルート Web.config ファイルに WCF HttpModule
がインストールされ、すべての ASP.NET アプリケーションで WCF が有効になりました。 これはパフォーマンスに影響を与える可能性があるため、次の例に示すように、Web.config ファイルの ServiceModel
を削除できます。
<httpModules>
<remove name="ServiceModel" />
</httpModules>