次の方法で共有


方法 : 基本的な Web スタイル サービスを作成する

Windows Communication Foundation (WCF) では、Web エンドポイントを公開するサービスを作成できます。Web エンドポイントは、書式のない XML でデータを送信します。SOAP エンベロープはありません。ここでは、このようなエンドポイントを公開する方法を示します。

Bb412178.note(ja-jp,VS.90).gifメモ :
Web エンドポイントをセキュリティで保護する唯一の方法は、トランスポート セキュリティを使用する HTTPS を介してエンドポイントを公開することです。メッセージ ベースのセキュリティを使用する場合、セキュリティ情報は通常 SOAP ヘッダーに配置されます。SOAP 以外のエンドポイントに送信するメッセージには SOAP エンベロープが含まれないため、セキュリティ情報を配置する場所がなく、トランスポート セキュリティに依存する必要があります。

Web エンドポイントを作成するには

  1. ServiceContractAttributeWebInvokeAttribute、および WebGetAttribute の各属性でマークされたインターフェイスを使用して、サービス コントラクトを定義します。

    Bb412178.note(ja-jp,VS.90).gifメモ :
    既定では、WebInvokeAttribute は POST 呼び出しを操作にマッピングします。ただし、"method=" パラメータを指定することで、操作にマッピングするメソッドを指定できます。WebGetAttribute には "method=" パラメータがないため、サービス操作には GET 呼び出しのみがマッピングされます。

  2. サービス コントラクトを実装します。

サービスをホストするには

  1. WebServiceHost オブジェクトを作成します。

  2. WebHttpBehavior を持つ ServiceEndpoint を追加します。

    Bb412178.note(ja-jp,VS.90).gifメモ :
    エンドポイントを追加しない場合は、既定のエンドポイントが WebServiceHost によって自動的に作成されます。また WebServiceHostWebHttpBehavior も追加して、HTTP ヘルプ ページと Web サービス記述言語 (WSDL) の GET 機能を無効にし、メタデータ エンドポイントが既定の HTTP エンドポイントに干渉しないようにします。

    URL が "" である SOAP 以外のエンドポイントを追加すると、エンドポイント上の操作の呼び出しを行うときに予期しない動作が発生します。これはエンドポイントのリッスン URI が、ヘルプ ページ (WCF サービスのベース アドレスに移動すると表示されるページ) の URI と同じになるためです。

    これを回避するには、次のいずれかの操作を行います。

    • SOAP 以外のエンドポイントについては、空ではない URI を指定するようにします。
    • ヘルプ ページを無効にします。これは、次のコードで実現できます。
  3. サービス ホストを開き、ユーザーが Enter キーを押すのを待ちます。

    このサンプルでは、コンソール アプリケーションで Web スタイル サービスをホストする方法を示します。IIS からこのようなサービスをホストすることもできます。これを行うには、次のコードに示すように、.svc ファイルで WebServiceHostFactory クラスを指定します。

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

    この例では、Web サービス ホストをコードの中で強制的に構成します。Web サービス ホストはアプリケーション構成ファイルの中でも構成できます。次のアプリケーション構成ファイルは上のコードと同じ構成を行うために使用できます。

    <configuration>
      <system.serviceModel>
        <services>
          <service
              name="Microsoft.ServiceModel.Samples.BasicWebProgramming.Service"
              behaviorConfiguration="MyServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="https://localhost:8000/"/>
              </baseAddresses>
            </host>
            <endpoint address="" 
                      binding="webHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.BasicWebProgramming.IService" />
    
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceBehavior">
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

    アプリケーション構成ファイルを使用するには、前のコードに変更を加える必要があります。コードの中でベース アドレス、サービス動作、またはエンドポイントを指定する必要がなくなります。この変更例を次のコードに示します。

     using (WebServiceHost host = new WebServiceHost(typeof(Service)))
          {
              host.Open();
              Console.WriteLine("Service is running");
              Console.WriteLine("Press enter to quit...");
              Console.ReadLine();
              host.Close();
    }
    

Internet Explorer で GET にマッピングされたサービス操作を呼び出すには

  1. Internet Explorer を開いて「https://localhost:8000/EchoWithGet?s=Hello, world!」と入力し、Enter キーを押します。この URL には、サービスのベース アドレス ("https://localhost:8000/") が含まれており、エンドポイントの相対アドレス ("")、呼び出しを行うサービス操作 ("EchoWithGet")、疑問符の後にアンパサンド (&) で区切られた名前付きパラメータのリストが続きます。

コードからサービス操作を呼び出すには

  1. using ブロック内で ChannelFactory のインスタンスを作成します。

  2. ChannelFactory が呼び出すエンドポイントに WebHttpBehavior を追加します。

  3. チャネルを作成し、サービスを呼び出します。

  4. WebServiceHost を閉じます。

この例の完全なコードの一覧を以下に示します。

コードのコンパイル

Service.cs のコンパイル時には、System.ServiceModel.dll と System.ServiceModel.Web.dll が参照されます。

関連項目

リファレンス

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior