方法: XmlSerializer を使用する WCF クライアント アプリケーションの起動時間を短縮する

XmlSerializer を使用してシリアル化できるデータ型を使用するサービスおよびクライアント アプリケーションは、実行時にこのようなデータ型のシリアル化コードを生成およびコンパイルします。このため、起動時のパフォーマンスが低下することがあります。

Note

事前生成済みシリアル化コードはクライアント アプリケーションでのみ使用できます。サービスでは使用できません。

ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用すると、必要なシリアル化コードをアプリケーションのコンパイル済みアセンブリから生成することで、このようなアプリケーションの起動時のパフォーマンスを改善できます。 Svcutil.exe は、XmlSerializer を使用してシリアル化できるコンパイル済みアプリケーション アセンブリに格納されたサービス コントラクトで使用されるすべてのデータ型に対して、シリアル化コードを生成します。 XmlSerializer を使用するサービスおよび操作コントラクトは、XmlSerializerFormatAttribute でマークされます。

XmlSerializer シリアル化コードを生成するには

  1. サービスまたはクライアント コードを 1 つ以上のアセンブリにコンパイルします。

  2. SDK コマンド プロンプトを開きます。

  3. コマンド プロンプトで、次の形式を使用して Svcutil.exe ツールを起動します。

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    assemblyPath 引数には、サービス コントラクト型を格納するアセンブリへのパスを指定します。 Svcutil.exe は、XmlSerializer を使用してシリアル化できるコンパイル済みアプリケーション アセンブリに格納されたサービス コントラクトで使用されるすべてのデータ型に対して、シリアル化コードを生成します。

    Svcutil.exe は、C# のシリアル化コードのみを生成できます。 入力アセンブリごとに、1 つのソース コード ファイルが生成されます。 生成されるコードの言語を変更するために /language スイッチを使用することはできません。

    依存アセンブリへのパスを指定するには、 /reference オプションを使用します。

  4. 次のオプションのいずれかを使用して、生成したシリアル化コードをアプリケーションから利用できるようにします。

    1. 生成されたシリアル化コードをコンパイルして、[元のアセンブリ].XmlSerializers.dll という名前 (MyApp.XmlSerializers.dll など) の別のアセンブリにします。 アプリケーションがアセンブリを読み込むことができ、アセンブリが元のアセンブリと同じキーで署名されている必要があります。 元のアセンブリを再コンパイルする場合は、シリアル化アセンブリも再生成する必要があります。

    2. 生成されたシリアル化コードを別個のアセンブリにコンパイルし、XmlSerializerAssemblyAttribute を使用するサービス コントラクトで XmlSerializerFormatAttribute を使用します。 AssemblyName プロパティまたは CodeBase プロパティが、コンパイル済みのシリアル化アセンブリを指すように設定します。

    3. 生成されたシリアル化コードをアプリケーション アセンブリにコンパイルし、XmlSerializerAssemblyAttribute を使用するサービス コントラクトに XmlSerializerFormatAttribute を追加します。 AssemblyName プロパティおよび CodeBase プロパティは設定しないでください。 既定のシリアル化アセンブリが現在のアセンブリであると見なされます。

Visual Studio で XmlSerializer シリアル化コードを生成するには

  1. Visual Studio で WCF サービスとクライアント プロジェクトを作成します。 次に、サービス参照をクライアント プロジェクトに追加します。

  2. serviceReference ->reference.svcmap のクライアント アプリ プロジェクト内の reference.cs ファイルにあるサービス コントラクトに XmlSerializerFormatAttribute を追加します。 これらのファイルを表示するには、ソリューション エクスプローラー内のすべてのファイルを表示する必要があることに注意してください。

  3. クライアント アプリをビルドします。

  4. ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用して、事前に生成されるシリアライザー .cs ファイルを、次のコマンドで作成します。

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    AssemblyPath 引数で、WCF クライアント アセンブリへのパスを指定します。

    例:

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

    WCFClient.XmlSerializers.dll.cs ファイルが生成されます。

  5. 事前に生成されるシリアル化アセンブリをコンパイルします。

    前の手順の例に基づくと、compile コマンドは次のようになります。

    csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs  
    

    生成された WCFClient.XmlSerializers.dll が、クライアント アプリ (この場合は WCFClient.exe) と同じディレクトリにあることを確認します。

  6. 通常どおりにクライアント アプリを実行します。 事前に生成されたシリアル化アセンブリが使用されます。

次のコマンドにより、アセンブリに含まれているサービス コントラクトが使用する XmlSerializer 型用のシリアル化型を生成します。

svcutil /t:xmlserializer myContractLibrary.exe  

関連項目