WCFとAsp.NetWebサービス比較

4975 ワード

まずWCFとは何かを簡単に紹介してから、WCFとAspについて説明します.NetWebサービスを比較します.
Windows Communication Foundation(WCF)は、サービス向けアプリケーションを構築するためのフレームワークです.WCFによって、データは、1つのサービスターミナルから別のサービスターミナルに非同期メッセージとして送信され得る.サービス終了点は、IISによってベアラされる持続的に利用可能なサービスの一部であってもよいし、アプリケーションにおいてベアラされるサービスであってもよい.ターミナルは、サービスターミナルからデータを要求するサービスクライアントであってもよい.メッセージは、XML形式で送信される単一の文字または単語から、複雑なバイナリ・データ・ストリームへとすることができる.WCFが登場する前にアプリケーションを開発することもできるが,WCFの出現はこのようなアプリケーションの開発をより簡単にした.
 
    Asp.NetWebサービスは通常XmlSerializerに依存する.NET Frameworkのデータ型をXML形式に変換するサービスで転送したり、サービスから受信XML形式のデータを変換する.NET Frameworkのオブジェクト.
XmlSerializerのシーケンス化または逆シーケンス化を用いる.NET Frameworkのデータ型の場合のデメリット:
1、publicとマークされたフィールドと属性のみをシーケンス化することができる.
2、IEnumerableとICollectionインタフェースを実現したクラスの集合のみがシーケンス化される.
3.IDictionaryインタフェースを実装するクラスは、Hashtableなどのシーケンス化できません.
WCFは、DataContractAttributeとDataMemberAttributeとを用いる、直列化可能であることを示す.NET Frameworkタイプ.
[DataContract]
public class Item
{
    [DataMember]
    public string ID;
    [DataMember]
    public decimal Qty;
    [DataMember]
    public decimal Price;
}

DataContractAttributeはクラスまたは構造体に適用でき、DataMemberAttributeはpublicまたはprivateとマークされたフィールドおよび属性に適用できます.
DataContractSerializerとXmlSerializerの違い:
1、DataContractSerializerが違う.NET Frameworkのデータ型はXMLでの表示方式を制御するため、XmlSerializerよりも性能が高い.
2、XmlSerializerではシーケンス化するフィールドまたは属性を決定できませんが、DataContractSerializerではDataMemberAttributeを使用してシーケンス化するフィールドまたは属性を明確に決定できます.
3、DataContractSerializerはIDictionaryインタフェースを実現したクラスをシーケンス化することができる.
4、DataContractSerializerはオブジェクトの非publicメンバーにアクセスできるため、逆シーケンス化時に完全信頼モードで実行する必要があり、XmlSerializerは必要ありません.
 
サービスの開発
開発中NetWebサービスではクラスにWebServiceプロパティ(attribute)を追加し、クラスのメソッドにWebMethodAttributeを追加する必要があります.
[WebService]
public class WebService1 : System.Web.Services.WebService
{
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
}

1つのWCFサービスは、アドレス(Address)、バインディング(Binding)、契約(Contract)を含む1つまたは複数のWCFターミナルを提供する.WCFサービスを開発する場合、サービス契約を定義するためにインタフェースにServiceContractAttributeとOperationContractAttributeを追加するのが一般的です.
[ServiceContract]
public interface IService1
{
    [OperationContract]
    void DoWork();
}

ServiceContractAttributeは、インタフェースがWCFサービス契約を定義することを指定します.OperationContractAttributeは、インタフェース内のどのメソッドがサービス契約内のアクションとして定義されるかを示します.サービス契約を定義するには、次のクラスが必要です.
public class Service1 : IService1
{
    public void DoWork()
    {
        // do some works
    }
}

サービス契約を実現したクラスはWCFの1つのサービスである.次に、プロファイルでサービス・アドレスとバインド・タイプを構成します.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
     <system.serviceModel>
      <services>
      <service name="Service1">
       <endpoint 
        address="Service1"
        binding="basicHttpBinding"
        contract="IService1"/>
      </service>
      </services>
     </system.serviceModel>
</configuration>

バインドは、エンドポイントと通信する方法を指定します.WCFがサポートするバインドは
BasicHttpBinding、WSHttpBinding、WSDualHttpBinding、WSFederationBinding、NetTcpBinding、NetNamedPipeBinding、NetMsmqBinding、MsmqIntegrationBinding、NetPeerTcpBinding.ここでBasichttpBindingはAspを含む.NetWebサービスがサポートするプロトコル.
 
サービスの負荷
Asp.NetWebサービスのコンパイル後、プログラムセットと拡張子を生成します.asmxのサービスファイルで、サービスクラスのコードとその存在するプログラムセットの情報が含まれています.サービスファイルをIISにより担持するAspにコピーする.Netプログラムのルートディレクトリの下で、プログラムセットをプログラムルートディレクトリの下の/binディレクトリの下にコピーします.サービスはサービスファイルのURLからアクセスできます.
WCFサービスは、IIS、Windows Process Activation Service(WAS)または.NETアプリケーションベアラ.IISまたはWASでベアラする手順は、次のとおりです.
1、コンパイルサービス.
2、拡張子を.svcのサービスファイルは仮想ディレクトリにコピーされ、プログラムセットは仮想ディレクトリの/binフォルダにコピーされます.
3、web.configプロファイルを仮想ディレクトリにコピーします.
 
クライアント開発
Asp.NetWebサービスクライアントはコマンドラインツールWSDLを通じて.EXEはクライアントコードを生成します.
WCFは、ServiceModel Metadata Utility Tool(svcutil.exe)を使用してクライアントコードを生成します.
 
メッセージ協定
Asp.NetWebサービスにおけるSOAPメッセージのメッセージヘッダはカスタマイズ可能である.
WCFは、サービス中のSOAPメッセージの構造を、MessageContractAttribute、MessageHeaderAttribute、およびMessageBodyMemberAttributeによって記述する.
 
メタデータ
クライアントはHTTP GETを介してAspに向かう.NetWebサービスがメタデータを要求する場合、ASP.NETはWSDLを生成しクライアントに送信する.生成されたWSDLは、ServiceDescriptionFormatExtensionから継承されたクラスを作成することによってカスタマイズできます.
クライアントはWCFにWS-MetadataExchange規格で定義された要求情報を送信し、返されたWSDLを受信することができる.WCFで生成されたWSDLもカスタマイズできます.WCFはまた、WSDLを生成しないように構成され、固定されたWSDLファイルのURLを提供することもできる.
 
例外処理
Asp.NetWebサービスで未処理の例外はSOAPエラーとしてクライアントに返されます.
WCFサービスで未処理の例外はSOAPエラーとしてクライアントに返されません.デバッグ時に未処理の例外をクライアントに返すように設定できます.
 
安全
Asp.NetWebサービスのセキュリティ設定は、他のIISアプリケーションのセキュリティ設定と同じです.
WCFはIIS以外の他のアプリケーションに搭載できるため、WCFのセキュリティ設定は独立している.しかしAspに応用できる.NetWebサービスのセキュリティ設定はWCFにも適用できます.