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

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

ИЗМЕНИТЬ

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


person roostaamir    schedule 04.09.2015    source источник
comment
или я могу сделать это в файле конфигурации хост-приложения? - Вы имели в виду, что это был вопрос или утверждение?   -  person StingyJack    schedule 04.09.2015
comment
Почему у вас 2 файла конфигурации? Файл конфигурации хоста — это файл, который будет загружен и прочитан. Вся конфигурация должна идти туда.   -  person tom redfern    schedule 04.09.2015
comment
а что насчет той, что у службы есть своя?   -  person roostaamir    schedule 04.09.2015


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

person tom redfern    schedule 04.09.2015
comment
это правда, и, как я сказал в своем вопросе, мы можем определить конфигурации в файле конфигурации HOST APPILCATION. как я могу использовать конфигурации службы, определенные в конфигурационном файле SERVICEs? - person roostaamir; 04.09.2015
comment
@user2078785 user2078785 - Конфигурация хост-приложения — ЭТО ТО ЖЕ ЧТО, КАК конфиг службы. Вы говорите, что новичок в WCF - вы также новичок в .Net? В .Net у вас есть один файл конфигурации для каждого процесса. - person tom redfern; 04.09.2015
comment
когда я создаю проект библиотеки служб, в проекте есть файл app.config. Какая польза от этого файла конфигурации, если я собираюсь всегда использовать файл app.config хост-приложения? - person roostaamir; 04.09.2015
comment
@user2078785 user2078785 - Это бесполезно - когда ваше хост-приложение запускается, оно находит только свой локальный файл конфигурации. Но вы можете скопировать соответствующие биты из конфигурации проекта WCF в файл конфигурации вашего хост-приложения. В вашем случае эти соответствующие биты - это все внутри <system.serviceModel /> - person tom redfern; 04.09.2015
comment
так как приложение хостинга по умолчанию может использовать этот файл конфигурации (тот, который определен в приложении библиотеки службы wcf)? (извините, что я задаю так много вопросов) - person roostaamir; 05.09.2015
comment
Он не может использовать этот файл конфигурации. Он может использовать только свой собственный. Поэтому вам нужно скопировать конфигурацию из одного файла и вставить в другой. - person tom redfern; 05.09.2015