Windows Communication Foundation の採用を見越して: 将来的な統合を円滑にする

現在 ASP.NET を使用していて、将来 WCF を使用する予定の場合、このトピックでは、新しい ASP.NET Web サービスが WCF アプリケーションと連携して適切に機能することを確認するためのガイダンスを提供します。

一般的な推奨事項

新しいサービスには ASP.NET 2.0 を採用してください。 これにより、新しいバージョンの改善および機能強化にアクセスできるようになります。 ただし、同じアプリケーションで WCF コンポーネントと共に ASP.NET 2.0 コンポーネントを使用することもできます。

プロトコル

WS-I 基本プロファイル 1.1 への適合を検証するには、ASP.NET 2.0 の新しい施設を使用します。

[WebService(Namespace = "http://tempuri.org/")]  
[WebServiceBinding(  
     ConformsTo = WsiProfiles.BasicProfile1_1,  
     EmitConformanceClaims=true)]  
public interface IEcho  

WS-I Basic Profile 1.1 に準拠する ASP.NET Web サービスは、WCF 定義済みバインディング ( BasicHttpBinding) を使用して WCF クライアントと相互運用できます。

サービス開発

soapAction HTTP ヘッダーではなく、SOAP メッセージの本文要素の完全修飾名に基づいてメッセージをメソッドにルーティングするには、 SoapDocumentServiceAttribute 属性を使用しないでください。 WCF は、メッセージのルーティングに SOAPAction HTTP ヘッダーを使用します。

データ表現

既定で XmlSerializer が型をシリアル化する XML は、XML の名前空間が明示的に定義されていれば、 DataContractSerializer が型をシリアル化する XML と意味的に同じです。 将来 WCF を採用することを想定して、ASP.NET Web サービスで使用するデータ型を定義する場合は、次の操作を行います。

  1. XML スキーマではなく .NET Framework クラスを使用して型を定義します。

  2. クラスに SerializableAttributeXmlRootAttribute のみを追加し、後者を使用して型の名前空間を明示的に定義します。 .NET Framework クラスを XML に変換する方法を制御するために、 System.Xml.Serialization 名前空間から属性を追加しないでください。

このアプローチを採用することで、後で .NET クラスをデータコントラクトに変換し、DataContractAttributeDataMemberAttribute を追加しても、クラスが転送のためにシリアル化される XML を大幅に変更することなく済むはずです。 ASP.NET Web サービスによってメッセージで使用される型は、WCF アプリケーションによるデータ コントラクトとして処理でき、WCF アプリケーションのパフォーマンスが向上します。

セキュリティ

インターネット インフォメーション サービス (IIS) によって提供される認証オプションは使用しないでください。 WCF クライアントではサポートされていません。 サービスをセキュリティで保護する必要がある場合は、WCF によって提供されるオプションを使用します。これらのオプションは豊富であり、標準プロトコルに基づいているためです。

こちらも参照ください