WCF サービスと ASP.NETWCF services and ASP.NET

このトピックでは、ホスト Windows Communication Foundation (WCF) サービスのサイド ASP.NET と ASP.NET 互換モードでホストすることについて説明します。This topic discusses hosting Windows Communication Foundation (WCF) services side-by-side with ASP.NET and hosting them in ASP.NET compatibility mode.

WCF - サイドと ASP.NET をホストしています。Hosting WCF side-by-side with ASP.NET

インターネット インフォメーション サービス (IIS) でホストされる WCF サービスは、同じコンピューターでことができます。ASPX ページと 1 つの一般的なアプリケーション ドメイン内の ASMX Web サービス。WCF services hosted in Internet Information Services (IIS) can be located with .ASPX pages and ASMX Web services inside of a single, common Application Domain. ASP.NET では、AppDomain の管理と WCF と ASP.NET HTTP ランタイムの両方の動的なコンパイルなどの一般的なインフラストラクチャ サービスを提供します。ASP.NET provides common infrastructure services such as AppDomain management and dynamic compilation for both WCF and the ASP.NET HTTP runtime. WCF の既定の構成は、サイド バイ サイドで ASP.NET を使用しました。The default configuration for WCF is side-by-side with ASP.NET.

WCF サービスおよび ASP .NET を示すスクリーン ショット: 状態を共有します。

ASP.NET HTTP ランタイムは、ASP.NET 要求の処理が場合でも、同じ AppDomain でこれらのサービスがホストされているは、ASP.NET がコンテンツに WCF サービス宛ての要求の処理に関与しません。The ASP.NET HTTP runtime handles ASP.NET requests but does not participate in the processing of requests destined for WCF services, even though these services are hosted in the same AppDomain as is the ASP.NET content. 代わりに、WCF サービス モデルは WCF サービス宛てのメッセージをインターセプトし、それを WCF トランスポート/チャネル スタックを介してルーティングします。Instead, the WCF Service Model intercepts messages addressed to WCF services and routes them through the WCF transport/channel stack.

この結果、サイド バイ サイド モデルは次のようになります。The results of the side-by-side model are as follows:

  • ASP.NET および WCF サービスは、AppDomain の状態を共有できます。ASP.NET and WCF services can share AppDomain state. 2 つのフレームワークは、同じ AppDomain で共存できる、ため、WCF が ASP.NET (静的変数、イベントなどを含む) を使用した AppDomain の状態を共有できますも。Because the two frameworks can coexist in the same AppDomain, WCF can also share AppDomain state with ASP.NET (including static variables, events, and so on).

  • WCF サービスのホスティング環境やトランスポートに依存しない、一貫した動作します。WCF services behave consistently, independent of hosting environment and transport. ASP.NET HTTP ランタイムは意図的に、IIS/ASP.NET ホスティング環境や HTTP 通信と強く結合する形で設計されています。The ASP.NET HTTP runtime is intentionally coupled to the IIS/ASP.NET hosting environment and HTTP communication. WCF がホスティング環境間で一貫して動作するように設計逆に、(WCF 動作の内部と外部 IIS) やトランスポート (IIS 7.0 でホストされているし、後で、サービスが公開するすべてのエンドポイント間で一貫した動作を持つ場合でもこれらのエンドポイントの一部を使用して、HTTP 以外のプロトコル)。Conversely, WCF is designed to behave consistently across hosting environments (WCF behaves consistently both inside and outside of IIS) and across transport (a service hosted in IIS 7.0 and later has consistent behavior across all endpoints it exposes, even if some of those endpoints use protocols other than HTTP).

  • 同じ AppDomain 内では、HTTP ランタイムによって実装される機能は、WCF ではなく、ASP.NET コンテンツに適用されます。Within an AppDomain, features implemented by the HTTP runtime apply to ASP.NET content but not to WCF. ASP.NET アプリケーション プラットフォームの多くの HTTP 固有の機能は、ASP.NET コンテンツが含まれている AppDomain 内でホストされる WCF サービスには適用されません。Many HTTP-specific features of the ASP.NET application platform do not apply to WCF Services hosted inside of an AppDomain that contains ASP.NET content. このような機能の例を次に示します。Examples of these features include the following:

    • HttpContext:Currentは常にnullWCF サービス内からアクセスする場合。HttpContext: Current is always null when accessed from within a WCF service. 代わりに、RequestContext を使用してください。Use RequestContext instead.

    • ファイル ベースの承認:WCF のセキュリティ モデルは、サービス要求が承認されているかどうかを決定する際に、サービスの .svc ファイルに適用されるアクセス制御リスト (ACL) にはできません。File-based authorization: The WCF security model does not allow for the access control list (ACL) applied to the .svc file of the service when deciding if a service request is authorized.

    • 構成ベースの URL 承認:同様に、WCF のセキュリティ モデルが System.Web ので指定された、URL ベースの承認規則に従っていない<authorization > 構成要素。Configuration-based URL Authorization: Similarly, the WCF security model does not adhere to any URL-based authorization rules specified in System.Web’s <authorization> configuration element. サービスは、ASP で保護された URL 空間に存在する場合、WCF 要求のこれらの設定は無視されます。NET の URL 承認規則。These settings are ignored for WCF requests if a service resides in a URL space secured by ASP.NET’s URL authorization rules.

    • HttpModule の拡張機能:WCF のホスティング インフラストラクチャは、WCF をインターセプト要求、PostAuthenticateRequestイベントが発生し、処理は ASP.NET HTTP パイプラインに返されません。HttpModule extensibility: The WCF hosting infrastructure intercepts WCF requests when the PostAuthenticateRequest event is raised and does not return processing to the ASP.NET HTTP pipeline. パイプラインの後の段階で要求をインターセプトに設計されたモジュールは、WCF 要求を途中受信できません。Modules that are coded to intercept requests at later stages of the pipeline do not intercept WCF requests.

    • ASP.NET impersonation:既定では、WCF に対する要求は常に実行、IIS のプロセス id、System.Web を使用した偽装を有効にする ASP.NET が設定されている場合でも<identity impersonate ="true"/> 構成オプション。ASP.NET impersonation: By default, WCF requests always runs as the IIS process identity, even if ASP.NET is set to enable impersonation using System.Web’s <identity impersonate="true" /> configuration option.

これらの制限は、IIS アプリケーションでホストされる WCF サービスにのみ適用されます。These restrictions apply only to WCF services hosted in IIS application. WCF の存在によっては、ASP.NET コンテンツの動作は影響はありません。The behavior of ASP.NET content is not affected by the presence of WCF.

従来 HTTP パイプラインによって提供される機能を必要とする WCF アプリケーションは、ホストは、トランスポートに依存しませんが、WCF 対応の使用を検討する必要があります。WCF applications that require functionality traditionally provided by the HTTP pipeline should consider using the WCF equivalents, which are host and transport independent:

代わりに、WCF の ASP.NET 互換モードで、サービスを実行しているかを検討できます。Alternatively, you can consider running your services in WCF’s ASP.NET compatibility mode.

ASP.NET 互換モードでの WCF サービスをホストHosting WCF services in ASP.NET compatibility mode

WCF モデルはホスティング環境やトランスポート一貫した動作に設計されていますが、アプリケーションがこのレベルの柔軟性を必要としない場合も少なくありません。Although the WCF model is designed to behave consistently across hosting environments and transports, there are often scenarios where an application does not require this degree of flexibility. WCF の ASP.NET 互換モードでは、するか、HTTP 以外のプロトコル経由で通信するために IIS の外部でホストする機能は必要ありませんが、すべての ASP.NET Web アプリケーション プラットフォームの機能を使用するシナリオに適しています。WCF’s ASP.NET compatibility mode is suitable for scenarios that do not require the ability to host outside of IIS or to communicate over protocols other than HTTP, but that use all of features of the ASP.NET Web application platform.

WCF ホスティング インフラストラクチャは、WCF メッセージを途中受信し、HTTP パイプラインにルーティングする、既定のサイド バイ サイド構成とは異なり ASP.NET 互換モードで実行されている WCF サービスは、ASP.NET の HTTP 要求のライフ サイクルに完全に参加します。Unlike the default side-by-side configuration, where the WCF hosting infrastructure intercepts WCF messages and routes them out of the HTTP pipeline, WCF services running in ASP.NET Compatibility Mode participate fully in the ASP.NET HTTP request lifecycle. 互換モードでの WCF サービスはにより HTTP パイプラインを使用して、IHttpHandler実装、ASPX ページや ASMX Web サービスの処理方法の要求に似ています。In compatibility mode, WCF services use the HTTP pipeline through an IHttpHandler implementation, similar to the way requests for ASPX pages and ASMX Web services are handled. 結果として、WCF の動作と同じ ASMX に関して、次の ASP.NET 機能。As a result, WCF behaves identically to ASMX with respect to the following ASP.NET features:

  • HttpContext:ASP.NET 互換モードで実行されている WCF サービスがアクセスできるCurrentおよび関連付けられた状態。HttpContext: WCF services running in ASP.NET Compatibility Mode can access Current and its associated state.

  • ファイル ベースの承認:ASP.NET 互換モードで実行されている WCF サービスは、サービスの .svc ファイルをファイル システム アクセス制御リスト (Acl) をアタッチすることによりセキュリティで保護できます。File-based authorization: WCF services running in ASP.NET compatibility mode can be secure by attaching file system access control lists (ACLs) to the service’s .svc file.

  • URL 承認の設定:ASP します。NET の URL 承認規則は、WCF サービスが ASP.NET 互換モードで実行されている場合、WCF 要求に対して適用されます。Configurable URL authorization: ASP.NET’s URL authorization rules are enforced for WCF requests when the WCF service is running in ASP.NET Compatibility Mode.

  • HttpModuleCollection 拡張機能:ASP.NET 互換モードで実行されている WCF サービスが ASP.NET の HTTP 要求のライフ サイクルの完全に参加するため HTTP パイプラインで構成されている任意の HTTP モジュールがサービス呼び出しの前後に、WCF 要求で動作するようにします。HttpModuleCollection extensibility: Because WCF services running in ASP.NET Compatibility Mode participate fully in the ASP.NET HTTP request lifecycle, any HTTP module configured in the HTTP pipeline is able to operate on WCF requests both before and after service invocation.

  • ASP.NET Impersonation:ASP.NET の現在の id を使用して実行する WCF サービスの権限借用スレッドで、アプリケーションの ASP.NET の偽装が有効になっている場合に IIS のプロセス id が異なる可能性があります。ASP.NET Impersonation: WCF services run using the current identity of the ASP.NET impersonated thread, which may be different than the IIS process identity if ASP.NET impersonation has been enabled for the application. ASP.NET の偽装と WCF の偽装の両方が特定のサービス操作の有効になっているが場合、サービスの実装は WCF から取得した id を使用して最終的に実行されます。If ASP.NET impersonation and WCF impersonation are both enabled for a particular service operation, the service implementation ultimately runs using the identity obtained from WCF.

WCF の ASP.NET 互換モードは、次の構成 (アプリケーションの Web.config ファイルにあります) をアプリケーション レベルで有効です。WCF’s ASP.NET compatibility mode is enabled at the application level through the following configuration (located in the application’s Web.config file):

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

既定値は"true"が指定されていない場合。This value defaults to "true" if not specified. この値を設定"false"アプリケーションで実行されているすべての WCF サービスは ASP.NET 互換モードで実行していないことを示します。Setting this value to "false" indicates that all WCF services running in the application will not run in ASP.NET Compatibility Mode.

ASP.NET アプリケーション内で実行するかどうか、個々 のサービス実装が制御する機能があるため、ASP.NET 互換モードでは、基本的に、WCF の既定値から異なる要求処理のセマンティクスが示すとおり、互換性モードが有効になっています。Because ASP.NET Compatibility Mode implies request processing semantics that are fundamentally different from the WCF default, individual service implementations have the ability to control whether they run inside of an application for which ASP.NET Compatibility Mode has been enabled. 各サービスは、ASP.NET 互換モードをサポートするかどうかを、AspNetCompatibilityRequirementsAttribute で示すことができます。Services can use the AspNetCompatibilityRequirementsAttribute to indicate whether they support ASP.NET Compatibility Mode. この属性の既定値は Allowed です。The default value for this attribute is Allowed.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CalculatorService : ICalculatorSession
{//Implement calculator service methods.}

アプリケーション全体を互換モードにしたとき、個々のサービスのサポート レベルがどうなるかを表に示します。The following table illustrates how the application-wide compatibility mode setting interacts with the individual service’s stated level of support:

アプリケーション全体の互換モード設定Application-wide Compatibility Mode setting AspNetCompatibilityRequirementsMode[AspNetCompatibilityRequirementsMode]

設定Setting
実際の動作Observed Result
aspNetCompatibilityEnabled ="true"aspNetCompatibilityEnabled = "true" Required サービスは正常に動作します。Service activates successfully.
aspNetCompatibilityEnabled ="true"aspNetCompatibilityEnabled = "true" Allowed サービスは正常に動作します。Service activates successfully.
aspNetCompatibilityEnabled ="true"aspNetCompatibilityEnabled = "true" NotAllowed サービスがメッセージを受信した時点でアクティベーション エラーが発生します。An activation error occurs when the service receives a message.
aspNetCompatibilityEnabled ="false"aspNetCompatibilityEnabled = "false" Required サービスがメッセージを受信した時点でアクティベーション エラーが発生します。An activation error occurs when the service receives a message.
aspNetCompatibilityEnabled ="false"aspNetCompatibilityEnabled = "false" Allowed サービスは正常に動作します。Service activates successfully.
aspNetCompatibilityEnabled ="false"aspNetCompatibilityEnabled = "false" NotAllowed サービスは正常に動作します。Service activates successfully.

注意

IIS 7.0 と WAS により、HTTP 以外のプロトコル経由で通信する WCF サービス。IIS 7.0 and WAS allows WCF services to communicate over protocols other than HTTP. ただし、ASP.NET 互換モードを有効にするアプリケーションで実行されている WCF サービスは、非 HTTP エンドポイントを公開するは許可されません。However, WCF services running in applications that have enabled ASP.NET compatibility mode are not permitted to expose non-HTTP endpoints. 最初のメッセージを受信した時点で、アクティベーション例外が発生します。Such a configuration generates an activation exception when the service receives its first message.

WCF サービスの ASP.NET 互換モードを有効にする方法の詳細については、次を参照してください。AspNetCompatibilityRequirementsModeASP.NET 互換性サンプル。For more information about enabling ASP.NET compatibility mode for WCF services, see AspNetCompatibilityRequirementsMode and the ASP.NET Compatibility sample.

関連項目See also