セールス: 1-800-867-1380

Azure 対応の Web アプリケーションとシリアル化

更新日: 2014年6月

Azure アプリケーションの作成では、オンプレミス アプリケーションの作成と比べて、データのシリアル化がさらに重要になります。Azure アプリケーションでは、データベースの使用、一般的なストレージ、データ転送、およびキャッシュの料金がかかります。料金の詳細については、「価格の概要」を参照してください。また、Azure アプリケーションは、スマートフォンやタブレットなどのモバイル デバイスから使用されることがあり、その場合は待機時間が生じることがあります。モバイル デバイスの特質上、接続が中断されることがあるためです。これらすべての要因から、アプリケーションによるデータの送受信方法を検討することが重要であることがわかります。ペイロードが小さくなるほど、帯域幅とストレージのコストは削減され、遅延を最小限に抑えやすくなる場合があります。

WCF には、DataContractSerializerXmlSerializerNetDataContractSerializer、および DataContractJsonSerializer の 4 つのシリアライザーが付属しています。使用するシリアライザーにより .NET オブジェクトから XML への変換方法が決まります。シリアル化されると、XML データは一連のバイトとしてネットワークに書き込まれます。XML を受け取りバイト ストリームに変換するプロセスをエンコードと呼びます。WCF はテキスト、バイナリ、および MTOM エンコードをサポートしています。シリアル化はサービス コントラクトの属性により制御されます。既定では DataContractSerializer が使用され、これは ServiceContractAttribute で指定します。XmlSerializer を使用するには、XmlSerializerFormatAttribute をサービス コントラクトに適用します。DataContractJsonSerializer が使用されるのは、WebGetAttribute または WebInvokeAttribute がサービス操作に適用されるときです。両方の属性で RequestFormatResponseFormat を指定できます。JSON を要求と応答に使用するには、これらの両方の属性を WebMessageFormat.Json に設定します。JSON を使用するには、WebHttpBehavior を自動的に構成する WebHttpBinding を使用する必要があります。WCF でのシリアル化の詳細については、「シリアル化と逆シリアル化」および「Windows Communication Foundation でのシリアル化」を参照してください。JSON と WCF の詳細については、「WCF を使用した RESTful サービスの概要」、「.NET 3.5 での JSON 対応の WCF サービスの作成、「WCF での REST の概要」を参照してください。

Important重要
JSON を使用するには、SOAP 通信をサポートしない WebHttpBindingWebHttpBehavior を使用する必要があります。WebHttpBinding と通信するサービスはサービス メタデータの公開をサポートしていません。そのため、Visual Studio のサービス参照の追加機能や svcutil コマンドライン ツールを使用して、クライアント側プロキシを生成できなくなります。WebHttpBinding を使用するサービスをプログラムで呼び出す方法の詳細については、「WCF で REST サービスを使用する方法」を参照してください。

Open Data Protocol は次の 2 つのシリアル化形式をサポートしています。

  • Atom 配信形式 (Atom): Web フィードに使用される XML ベースのデータ交換形式。

  • JavaScript Object Notation (JSON): 人間が判読できる簡易データ交換形式。

OData では、クライアントは Accept メッセージ ヘッダーを設定することで、必要な応答のシリアル化形式を要求できます。OData には、要求のヘッダーを設定できないクライアントに使用できる $format システム クエリ オプションも用意されています。WCF Data Services は、Atom と JSON の両方のシリアル化形式をサポートしていますが、$format クエリ オプションはサポートしていません。すべての有効なクライアント用に JSON シリアル化をサポートするには、WCF Data Services の実装で $format クエリ オプションのサポートを有効にする必要があります。詳細については、Azure での OData に関するガイダンスを参照してください。

通常、シリアル化のサイズの重要な違いを示すには、異なる方法による同じ型のシリアル化を示すことが役立ちます。次に示しているのは、サンプルの Person 型の定義です。

[DataContract(Namespace="http://example.org/person")]
    public class Person
    {
        public Person() { }
        public Person(string last, string first, string email)
        {
            lastName = last;
            firstName = first;
            emailAddress = email;
        }

        [DataMember]
        public string firstName { get; set; }

        [DataMember]
        public string lastName { get; set; }

        [DataMember]
        public string emailAddress { get; set; }
    }
}           

DataContractSerializerPerson のインスタンスを次のようにシリアル化します。

<?xml version="1.0"?>
    <Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.org/person">
    <emailAddress>kim.abercrombie@contoso</emailAddress>
    <firstName>Kim</firstName>
    <lastName>Abercrombie</lastName>
</Person>

XmlSerializerPerson のインスタンスを次のようにシリアル化します。

<?xml version="1.0"?>
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <firstName>Kim</firstName>
    <lastName>Abercrombie</lastName>
    <emailAddress>kim.abercrombie@contoso</emailAddress>
</Person>

DataContractJsonSerializerPerson のインスタンスを次のようにシリアル化します。

{"emailAddress":"kim.abercrombie@contoso","firstName":"Kim","lastName":"Abercrombie"}

検討する必要のあるもう 1 つの領域はメッセージ エンコーダーです。エンコーダーは XML を受け取り、ネットワーク経由で送信できるバイト ストリームに変換します。これにより、ペイロードのサイズが大幅に削減される場合があります。エンコーダーはバインド時に構成します。エンコーダーの詳細については、「メッセージ エンコーダーを選択する」を参照してください。Microsoft バイナリ エンコーダーでは、データのサイズは最小になりますが、クライアントとサービスの両方が .NET Framework で実行されている必要があります。アプリケーションで他のプラットフォームとの相互運用性が必要な場合は、テキスト エンコーダーを使用します。独自のカスタム エンコーダーを実装し、任意の種類の圧縮を実行することもできます。詳細については、「カスタム メッセージ エンコーダー」を参照してください。

使用する最適なシリアライザーとエンコーダーは、アプリケーションや相互運用性のニーズによって異なります。サービスとクライアントの両方が .NET Framework で実行されている場合は、バイナリ エンコーダーと DataContractSerializer の使用を検討します。相互運用性が必要な場合は、テキスト エンコーダーを使用します。いずれの場合も、DataContractJsonSerializer によりデータのサイズは最小になりますが、非 SOAP サービスを使用する必要があります。SOAP を使用する必要がある場合は、DataContractSerializer の使用を検討します。

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft