Какой смысл определять конечные точки службы в самой службе WCF, когда хост-приложение, размещенное самостоятельно, не может даже использовать его

Я абсолютно новичок в 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. и, наконец, есть ли способ иметь собственные конфигурации службы в хост-приложении (без повторного определения конечных точек и поведения в хост-приложении) или две упомянутые конфигурации полностью отличаются?

РЕДАКТИРОВАТЬ

мой последний вопрос заключается в том, как я могу использовать конфигурации, определенные в файле конфигурации службы в хост-приложении (без использования собственного файла конфигурации хост-приложения или создания дополнительного кода для определения новых конечных точек и поведения)

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 решит, что вы хотите использовать файл конфигурации для определения службы, которую нужно запустить.

Другие вопросы по тегам