0

私は WCF の初心者で、まだ基礎を学んでいます。これまでに学んだことは、サービスを作成し、サービスの構成ファイルでそのエンドポイントと動作を構成できるということでした。Visual Studio でサービスを実行すると、既定のアプリケーションが作成され、サービスが IIS で正常にホストされ、すべてがうまく機能します。

ここで、サービスのホスト アプリケーションを作成するときに、次のようにコードにサービスのサービス エンドポイント (および動作) を再度追加する必要があることに気付きました。

ServiceHost host = new ServiceHost(typeof(HelloService));
host.AddServiceEndpoint(typeof(IHelloWorld), 
                        new WSHttpContextBinding(), 
                        "http://localhost:8873/helloworld/ws");

host.Open();

foreach (var se in host.Description.Endpoints)
{
    Console.WriteLine(se.Address);
}

host.Close();
Console.Read();

または、ホスト アプリケーションの構成ファイルで実行できます。

だからここに私の質問があります:

  1. ホストアプリケーションでさえ役に立たない場合、サービスの独自の構成ファイルでエンドポイントを定義するポイントは何ですか?

  2. それとも、サービスの構成ファイルが IIS および管理対象ホストにのみ適用されるということですか?

  3. 最後に、ホスト アプリケーションでサービス独自の構成を使用する方法がありますか (ホスト アプリケーションでエンドポイントと動作を再度定義しないでください)、または言及された 2 つの構成が完全に異なりますか?

編集

私の究極の質問は、ホスト アプリケーションでサービスの構成ファイルで定義された構成をどのように使用できるかということです (ホスト アプリケーションの独自の構成ファイルを使用したり、新しいエンドポイントと動作を定義するための追加のコードを作成したりせずに)

4

1 に答える 1

1

サービスのホスト アプリケーションを作成するときに、サービスのサービス エンドポイント (および動作) をコードに再度追加する必要があることに気付きました。

これは正しくありません。コードでサービス エンドポイントを定義する必要はまったくありません。それが設定ファイルの目的です。

サービスの名前 (構成ファイルで定義されている) を型として servicehost コンストラクターに渡すだけです。

var host = new ServiceHost(typeof(MyNamespace.MyService));

構成は次のように定義されています。

<system.serviceModel>
    <services>
      <service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
        <endpoint address="MyService"
                  binding="basicHttpBinding"
                  contract="MyNamespace.IMyService" />

        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8456/"/>
          </baseAddresses>
        </host>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

WCF は、構成ファイルを使用して実行するサービスを定義することを決定します。

于 2015-09-04T15:06:29.600 に答える