方法: 構成を使用せずに ASP.NET AJAX エンドポイントを追加する
Windows Communication Foundation (WCF) では、クライアント Web サイトの JavaScript から呼び出される ASP.NET AJAX 対応のエンドポイントを公開するサービスを作成できます。 このようなエンドポイントを作成するには、他のすべての WCF エンドポイントと同様に、構成ファイルを使用するか、または構成要素を必要としないメソッドを使用することができます。 ここでは、2 番目の方法について説明します。
構成を使用せずに ASP.NET AJAX エンドポイントを持つサービスを作成するには、サービスがインターネット インフォメーション サービス (IIS) でホストされている必要があります。 この方法を使用して ASP.NET AJAX エンドポイントをアクティブ化するには、.svc ファイルの @ServiceHost ディレクティブにある Factory パラメーターとして WebScriptServiceHostFactory を指定します。 このカスタム ファクトリは自動的に ASP.NET AJAX エンドポイントを構成するコンポーネントであるため、クライアント Web サイトの JavaScript から呼び出すことができます。
実際の例については、「構成を使用しない AJAX サービス」を参照してください。
構成要素を使用して ASP.NET AJAX エンドポイントを構成する方法の概要については、「方法: 構成を使用して ASP.NET AJAX エンドポイントを追加する」を参照してください。
基本的な WCF サービスを作成するには
ServiceContractAttribute 属性でマークされたインターフェイスを使用して、基本的な WCF サービス コントラクトを定義します。 各操作を OperationContractAttribute でマークします。 Namespace プロパティが設定されていることを確認します。
[ServiceContract(Namespace = "MyService")]] public interface ICalculator { [OperationContract] // This operation returns the sum of d1 and d2. double Add(double n1, double n2); //Other operations omitted… }
ICalculator
を使用して、CalculatorService
サービス コントラクトを実装します。public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } //Other operations omitted…
名前空間ブロック内にラップすることにより、
ICalculator
とCalculatorService
の実装の名前空間を定義します。Namespace Microsoft.Ajax.Samples { //Include the code for ICalculator and Calculator here. }
構成を使用せずにインターネット インフォメーション サービスでサービスをホストするには
アプリケーションで、.svc という拡張子を付けて新しい service ファイルを作成します。 このファイルを編集して、サービスに応じた @ServiceHost ディレクティブ情報を追加します。 ASP.NET AJAX エンドポイントが自動的に構成されるように、WebScriptServiceHostFactory ディレクティブで WebScriptServiceHostFactory を使用することを指定します。
<%@ServiceHost language=c# Debug="true" Service="Microsoft.Ajax.Samples.CalculatorService" Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory %>
サービスをビルドしてクライアントから呼び出します。 呼び出されたサービスがインターネット インフォメーション サービス (IIS) によってアクティブ化されます。 IIS でのホストの詳細については、「方法: IIS で WCF サービスをホストする」を参照してください。
サービスを呼び出すには
- エンドポイントは .svc ファイルを基準とした空のアドレスの位置に構成されているので、サービスは使用可能であり、service.svc/<operation> に対して要求を送信することでサービスを呼び出すことができます。たとえば、service.svc/Add では
Add
操作を呼び出します。 これは、ASP.NET AJAX Script Manager コントロールのスクリプト コレクションにサービス URL を入力することで使用できます。 例については、「構成を使用しない AJAX サービス」を参照してください。
例
自動的に構成されたエンドポイントは、ベース URL に対して相対的に空のアドレスの位置に作成されます。 この方法では、構成ファイルを追加して使用することもできます。 構成ファイルにエンドポイントの定義がある場合、これらのエンドポイントは自動的に構成されたエンドポイントに追加されます。
たとえば、service.svc が WebScriptServiceHostFactory を使用していて、そのサービス ディレクトリには、BasicHttpBinding を使用して "soap" という相対アドレスで同じサービスのエンドポイントを定義する Web.config ファイルが含まれているとします。 この場合、サービスには、service.svc に含まれるエンドポイント (ASP.NET AJAX 要求に応答) と、service.svc/soap にあるもう 1 つのエンドポイント (SOAP 要求に応答) の 2 つのエンドポイントが含まれることになります。
構成ファイルで空の相対アドレスにエンドポイントを定義した場合は、WebScriptServiceHostFactory が使用されると例外がスローされ、サービスの開始に失敗します。
自動的に構成されるエンドポイントの設定を変更するために構成を使用することはできません。 リーダーのクォータなど、設定の変更が必要な場合は、.svc ファイルから WebScriptServiceHostFactory を削除し、エンドポイントの構成エントリを作成することで、構成を使用しない方法の採用を中止します。
HttpContext クラスや ASP.NET 承認機構を使用するなど、サービスで ASP.NET 互換モードが必要な場合は、このモードを有効にするために引き続き構成ファイルが必要です。 必要な構成要素は <serviceHostingEnvironment> 要素であり、これを次のように追加する必要があります。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> </system.serviceModel>
詳細については、「WCF サービスと ASP.NET」を参照してください。
WebScriptServiceHostFactory クラスは、ServiceHostFactory の派生クラスです。 サービス ホスト ファクトリ機構の詳細については、「ServiceHostFactory を使用したホストの拡張」を参照してください。