次の方法で共有


ASP.NET を使用せずに WCF AJAX サービスを作成する

Windows Communication Foundation (WCF) AJAX サービスは、AJAX を ASP.NET しなくても、JavaScript 対応の任意の Web ページからアクセスできます。 このトピックでは、このような WCF サービスを作成する方法について説明します。

ASP.NET AJAX で WCF を使用する方法については、「ASP.NET AJAX 用の WCF サービスの作成」を参照してください。

WCF AJAX サービスの作成には、次の 3 つの部分があります。

  • ブラウザーからアクセスできる AJAX エンドポイントの作成。

  • AJAX と互換性のあるサービス コントラクトの作成。

  • WCF AJAX サービスへのアクセス。

AJAX エンドポイントの作成

WCF サービスで AJAX サポートを有効にする最も基本的な方法は、次の例のように、サービスに関連付けられている .svc ファイルの WebServiceHostFactory を使用することです。

<%ServiceHost
    language=c#  
    Debug="true"  
    Service="Microsoft.Ajax.Samples.CityService"  
    Factory=System.ServiceModel.Activation.WebServiceHostFactory  
%>  

または、構成を使用して AJAX エンドポイントを追加することもできます。 次のコード スニペットに示すように、サービス エンドポイントで WebHttpBinding を使用し、 WebHttpBehavior でそのエンドポイントを構成します。

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="AjaxBehavior">  
          <webHttp/>  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <services>  
      <service name="Microsoft.Ajax.Samples.CityService">  
        <endpoint
          address="ajaxEndpoint"  
          behaviorConfiguration="AjaxBehavior"  
          binding="webHttpBinding"  
          contract="Microsoft.Ajax.Samples.ICityService" />  
      </service>  
    </services>  
  </system.serviceModel>  
</configuration>  

有効な例については、 JSON と XML を使用した AJAX サービスを参照してください。

AJAX-Compatible サービス コントラクトの作成

既定では、AJAX エンドポイント経由で公開されているサービス コントラクトは、XML 形式でデータを返します。 また、既定では、サービス操作は、次の例に示すように、エンドポイント アドレスとそれに続く操作名を含む URL への HTTP POST 要求を介してアクセスできます。

[OperationContract]  
string[] GetCities(string firstLetters);  

この操作は、HTTP POST を使って http://serviceaddress/endpointaddress/GetCities にアクセスし、XML メッセージを返すことで利用できます。

完全な Web プログラミング モデルを使用して、これらの基本的な側面をカスタマイズできます。 たとえば、 WebGetAttribute 属性または WebInvokeAttribute 属性を使用して、操作が応答する HTTP 動詞を制御したり、これらの各属性の UriTemplate プロパティを使用してカスタム URI を指定することができます。 詳細については、「 WCF Web HTTP プログラミング モデル 」トピックを参照してください。

JSON データ形式は、AJAX サービスでよく使用されます。 XML ではなく JSON を返す操作を作成するには、 ResponseFormat (または ResponseFormat) プロパティを Jsonに設定します。 Stand-Alone JSON シリアル化トピックでは、組み込みの .NET 型とデータ コントラクト型が JSON にどのようにマップされるかを示します。

通常、JSON の要求と応答は 1 つの項目だけで構成されます。 上記の GetCities 操作の場合、要求は次のステートメントのようになります。

"na"  

その要求に対する応答は、次のステートメントのようになります。

["Nairobi", "Naples", "Nashville"]  

操作が追加のパラメーターを受け取る場合は、両方のパラメーターを 1 つの JSON オブジェクトでラップするように要求スタイルをラップする必要があります。 このスタイルの JSON メッセージの例を次に示します。

{"firstLetters": "na", "maxNumber": 2}  

次のコントラクトは、このメッセージを受け入れます。

[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)]  
[OperationContract]  
string[] GetCities(string firstLetters, int maxNumber);  

AJAX サービスへのアクセス

WCF AJAX エンドポイントは、常に JSON 要求と XML 要求の両方を受け入れます。

コンテンツ タイプが "application/json" の HTTP POST 要求は JSON として扱われ、XML ("text/xml" など) を示すコンテンツ タイプの要求は XML として扱われます。

HTTP GET 要求には、URL 自体のすべての要求パラメーターが含まれています。

エンドポイントへの HTTP 要求を作成する方法は、ユーザーが決定する必要があります。 また、ユーザーは要求の本文を形成する JSON の構築を完全に制御できます。 JavaScript からの要求を作成する例については、 JSON と XML を使用した AJAX サービスを参照してください。