次の方法で共有


インターネット インフォメーション サービスでホストされる WCF サービスの配置

IIS (インターネット インフォメーション サービス) でホストされている Windows Communication Foundation (WCF) サービスの開発と展開には、次のタスクが含まれます。

  • IIS、WCF、WCF アクティブ化コンポーネントが正しくインストールおよび登録されていることを確認します。
  • 新しい IIS アプリケーションを作成するか、既存の ASP.NET アプリケーションを再利用します。
  • WCF サービス用の .svc ファイルを作成します。
  • IIS アプリケーションにサービス実装を展開します。
  • WCF サービスを構成します。

IIS によってホストされる WCF サービスの作成に関する詳細なチュートリアルについては、「方法 : IIS で WCF サービスをホストする」を参照してください。

IIS と WCF が正しくインストールおよび登録されていることの確認

IIS でホストされる WCF サービスを正常に機能させるには、WCF と IIS の両方をインストールする必要があります。WCF (.NET Framework 3.0 の一部として) と IIS のインストール手順は、使用しているオペレーティング システムのバージョンによって異なります。WCF および .NET Framework 3.0 インストール詳細については、 、「Microsoft .NET Framework 3.0 再頒布可能パッケージ」を参照してください。IIS のインストール手順については、「IIS のインストール」を参照してください。

IIS が既にコンピュータにインストールされている場合は、.NET Framework 3.0 のインストール プロセスにより、WCF が IIS に自動登録されます。.NET Framework 3.0 の後に IIS をインストールした場合は、追加の手順に従って、WCF を IIS と ASP.NET に登録する必要があります。使用しているオペレーティング システムに応じて、次のように実行します。

  • Windows XP SP2 および Windows Server 2003 : ServiceModelReg.exe ツールを使用して、WCF を IIS に登録します。このツールを使用するには、コマンド プロンプトに「ServiceModelReg.exe /i /x」と入力します。
  • Windows Vista : .NET Framework 3.0 のサブコンポーネントの Windows Communication Foundation アクティベーション コンポーネントをインストールします。これを行うには、[コントロール パネル] の [プログラムの追加と削除] をクリックし、[Windows コンポーネントの追加と削除] をクリックします。[Windows コンポーネント ウィザード] がアクティブになります。

新しい IIS アプリケーションの作成、または既存の ASP.NET アプリケーションの再利用

IIS でホストされる WCF サービスは、IIS アプリケーションの内部に存在する必要があります。WCF サービスのみをホストする新しい IIS アプリケーションを作成できます。または、既に ASP.NET 2.0 コンテンツ (.aspx ページや ASP.NET Web サービス (ASMX) など) をホストしている既存のアプリケーションに WCF サービスを展開することもできます。これらのオプション詳細については、 、「WCF サービスと ASP.NET」の「WCF と ASP.NET の並行ホスト」および「ASP.NET 互換モードでの WCF サービスのホスト」のセクションを参照してください。

IIS 6.0 とそれ以降のバージョンでは、隔離されているオブジェクト指向プログラミング アプリケーションは定期的に再起動されることに注意してください。既定値は、1740 分です。サポートされている最大値は 71,582 分です。この再起動は、無効にすることができます。このプロパティ詳細については、 、「PeriodicRestartTime」を参照してください。

WCF サービス用の .svc ファイルの作成

IIS でホストされる WCF サービスは、IIS アプリケーションの内部で特別なコンテンツ ファイル (.svc ファイル) として表現されます。これは、ASMX ページが、IIS アプリケーションの内部で .asmx ファイルとして表現されるのと同様です。.svc ファイルには、WCF ホスト インフラストラクチャで、着信メッセージに応えてホスト対象サービスをアクティブ化できるようにする、WCF 固有の処理ディレクティブ (@ServiceHost) が含まれます。.svc ファイルの最も一般的な構文を次のステートメントに示します。

<% @ServiceHost Service=”MyNamespace.MyServiceImplementationTypeName” %>

この構文には、@ServiceHost ディレクティブと単一の属性 Service が含まれます。Service 属性の値は、サービス実装の共通言語ランタイム (CLR: Common Language Runtime) 型名です。このディレクティブを使用することは、次のコードを使用してサービス ホストを作成することと基本的に同じです。

      new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );

サービスのベース アドレスの一覧を作成するなど、追加のホスト構成を実行することもできます。カスタム ServiceHostFactory を使用して、このディレクティブをカスタム ホスト ソリューション用に拡張することもできます。WCF サービスをホストする IIS アプリケーションは、ServiceHost インスタンスの作成とライフタイムの管理を実行しません。管理対象の WCF ホスト インフラストラクチャは、.svc ファイルに対する最初の要求を受け取ったときに、必要な ServiceHost インスタンスを動的に作成します。このインスタンスは、コードによって明示的に閉じられるか、アプリケーションがリサイクルされるときまで解放されません。

.svc ファイルの構文詳細については、 、「@ServiceHost」を参照してください。

IIS アプリケーションへのサービス実装の展開

IIS でホストされる WCF サービスは、ASP.NET 2.0 と同一の動的なコンパイル モデルを使用します。ASP.NET の場合と同様に、IIS でホストされる WCF サービスの実装コードは、次のようないくつかの方法でさまざまな場所に展開できます。

  • グローバル アセンブリ キャッシュ (GAC: Global Assembly Cache) またはアプリケーションの \bin ディレクトリに配置される、プリコンパイルされた .dll ファイルとして展開します。プリコンパイルされたバイナリは、新しいバージョンのクラス ライブラリが展開されるまで更新されません。
  • アプリケーションの \App_Code ディレクトリに配置される、コンパイル解除されたソース ファイルとして展開します。このディレクトリに配置されたソース ファイルは、アプリケーションの最初の要求を処理するときに動的に要求されます。\App_Code ディレクトリ内のファイルを変更すると、次の要求を受け取ったときにアプリケーション全体がリサイクルされ、再コンパイルされます。
  • .svc ファイルに直接格納される、コンパイル解除されたコードとして展開します。また、実装コードも、サービスの .svc ファイル内の @ServiceHost ディレクティブの後にインラインで配置できます。インライン コードを変更すると、次の要求を受け取ったときにアプリケーションがリサイクルされ、再コンパイルされます。

ASP.NET 2.0 コンパイル モデル詳細については、 、「ASP.NET コンパイルの概要」を参照してください。

WCF サービスの構成

IIS でホストされる WCF サービスの構成は、アプリケーションの Web.config ファイルに格納されます。IIS でホストされるサービスは、IIS の外部でホストされる WCF サービスと同じ構成要素と構文を使用します。ただし、次の制約は、IIS ホスト環境に固有です。

  • IIS でホストされるサービスのベース アドレス。
  • IIS の外部の WCF サービスをホストするアプリケーションは、ベース アドレス URI のセットを ServiceHost コンストラクタに渡すか、サービスの構成に <host> 要素を指定することによって、ホストするサービスのベース アドレスを制御できます。IIS でホストされるサービスは、それぞれのベース アドレスを制御できません。IIS でホストされるサービスのベース アドレスは、その .svc ファイルのアドレスです。

IIS でホストされるサービスのエンドポイント アドレス

IIS でホストされるときのエンドポイント アドレスは、常にサービスを表す .svc ファイルのアドレスを基準にした相対アドレスと見なされます。たとえば、WCF サービスのベース アドレスが https://localhost/Application1/MyService.svc で、次のエンドポイント構成を伴う場合

<endpoint address=”anotherEndpoint” … />

"https://localhost/Application1/MyService.svc/anotherEndpoint" に到達できるエンドポイントが得られます。

同様に、相対アドレスとして空の文字列を使用するエンドポイント構成要素では、ベース アドレスである https://localhost/Application1/MyService.svc に到達できるエンドポイントが得られます。

<endpoint address=”” … />

IIS でホストされるサービスのエンドポイントには、常に相対エンドポイント アドレスを使用する必要があります。完全修飾されたエンドポイント アドレス (https://localhost/MyService.svc など) を指定すると、エンドポイント アドレスが、エンドポイントを公開するサービスをホストする IIS アプリケーションを指さない場合、サービスの展開エラーになる可能性があります。ホストされるサービスに相対エンドポイント アドレスを使用すると、このような競合が回避されます。

利用可能なトランスポート

IIS 5.1 および IIS 6.0 でホストされる WCF サービスが使用できるのは、HTTP ベースの通信のみに制限されています。これらの IIS プラットフォームでホストされるサービスで、非 HTTP バインドを使用するように構成すると、サービスをアクティブ化するときにエラーが発生します。IIS 7.0 でサポートされるトランスポートには、既存の MSMQ アプリケーションとの後方互換性を実現する HTTP、Net.TCP、Net.Pipe、Net.MSMQ、msmq.formatname があります。

HTTP トランスポート セキュリティ

IIS でホストされる WCF サービスでは、サービスを格納する IIS 仮想ディレクトリで設定がサポートされている場合、HTTP トランスポート セキュリティ (基本認証、ダイジェスト認証、Windows 統合認証などの HTTPS および HTTP 認証) を利用できます。ホストされるエンドポイントのバインディングでの HTTP トランスポート セキュリティ設定は、そのエンドポイントを格納する IIS 仮想ディレクトリでのトランスポート セキュリティ設定と一致する必要があります。

たとえば、HTTP ダイジェスト認証を使用するように構成された WCF エンドポイントは、HTTP ダイジェスト認証を許可するように構成された IIS 仮想ディレクトリに存在する必要があります。IIS の設定と WCF エンドポイントの設定の組み合わせが一致しない場合、サービスをアクティブ化するときにエラーが発生します。

関連項目

概念

インターネット インフォメーション サービスでのホスティング
インターネット インフォメーション サービス ホスティングのベスト プラクティス