Могут ли собственные приложения WCF автоматически создавать ServiceHosts с помощью app.config?
Когда я создаю собственное wcf-приложение, я создаю объекты ServiceHost для каждой службы, которую я хочу предоставить. Затем он просматривает файл app.config (соответствует имени сервера), а затем извлекает адрес и контракт соответствующей конечной точки.
Есть ли способ автоматически создавать ServiceHosts для каждой службы, которая указана в app.config. Я хотел бы добавить новые сервисы в app.config и автоматически загружать их, не перекомпилируя мою программу и не используя мой кодированный вручную процесс для создания объектов ServiceHost.
Есть ли фабрика или учебник, который кто-то может связать меня, который показывает мне, как это сделать? Спасибо
1 ответ
Я не уверен, что вы подразумеваете под извлечением связанных адресов и контрактов из конфига - это делается автоматически. Раздел службы в файле конфигурации автоматически сопоставляется с типом службы, размещенной в ServiceHost:
Сервис хостинга:
using (var host = new ServiceHost(typeof(MyNamespace.Service))
{
// no endpoint setting needed if configuration is correctly paired by the type name
host.Open()
}
Сервисная конфигурация:
<services>
<service name="MyNamespace.Service">
...
</service>
</service>
Теперь единственное, что вам нужно, это автоматически обрабатывать создание ServiceHost. Вот мой пример кода, чтобы сделать это:
class Program
{
static void Main(string[] args)
{
List<ServiceHost> hosts = new List<ServiceHost>();
try
{
var section = ConfigurationManager.GetSection("system.serviceModel/services") as ServicesSection;
if (section != null)
{
foreach (ServiceElement element in section.Services)
{
var serviceType = Type.GetType(element.Name);
var host = new ServiceHost(serviceType);
hosts.Add(host);
host.Open();
}
}
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
}
finally
{
foreach (ServiceHost host in hosts)
{
if (host.State == CommunicationState.Opened)
{
host.Close();
}
else
{
host.Abort();
}
}
}
}
}