Какой смысл определять конечные точки службы в самой службе 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();
или я могу сделать это в файле конфигурации хост-приложения
Итак, вот мой вопрос:
какой смысл определять конечные точки в собственном конфигурационном файле сервиса, когда он даже не полезен в хост-приложении?
Или файл конфигурации службы применяется только к IIS и только к управляемым хостам?
и, наконец, есть ли способ иметь собственные конфигурации службы в хост-приложении (без повторного определения конечных точек и поведения в хост-приложении) или две упомянутые конфигурации полностью отличаются?
РЕДАКТИРОВАТЬ
мой последний вопрос заключается в том, как я могу использовать конфигурации, определенные в файле конфигурации службы в хост-приложении (без использования собственного файла конфигурации хост-приложения или создания дополнительного кода для определения новых конечных точек и поведения)
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 решит, что вы хотите использовать файл конфигурации для определения службы, которую нужно запустить.