Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Windows Communication Foundation (WCF) позволяет разработчикам настраивать службы с помощью файлов конфигурации или кода. Файлы конфигурации используются, если необходимо настроить службу после ее развертывания. При использовании файлов конфигурации ИТ-работнику требуется только обновить файл конфигурации без необходимости выполнять повторную компиляцию. Файлы конфигурации, однако, могут быть сложными и требовать больших усилий при обслуживании. Отсутствует поддержка отладки файлов конфигурации, и ссылки на элементы конфигурации осуществляются по именам, что усложняет работу и способствует совершению ошибок при создании файлов конфигурации. WCF также позволяет настраивать службы в коде. В более ранних версиях WCF (4.0 и более ранних версий) настройка служб в коде была легкой в локальном сценарии, ServiceHost класс позволил настроить конечные точки и поведение до вызова ServiceHost.Open. Однако в сценариях с размещением в Интернете нет прямого доступа к классу ServiceHost. Чтобы настроить веб-хостинговую службу, приходилось создавать класс System.ServiceModel.ServiceHostFactory, который создавал ServiceHostFactory и выполнял необходимые настройки. Начиная с версии .NET Framework 4.5, WCF предоставляет более простой способ настройки как самостоятельно размещаемых служб, так и служб, размещаемых в интернете в коде.
Метод Конфигурации
Просто определите открытый статический метод с именем Configure со следующей сигнатурой в классе реализации службы.
public static void Configure(ServiceConfiguration config)
Метод Configure принимает экземпляр ServiceConfiguration, что позволяет разработчику добавлять конечные точки и поведения. Этот метод вызывается WCF перед открытием узла службы. Если он задан, то никакие параметры конфигурации службы, определенные в файле app.config или web.config, не учитываются.
В следующем фрагменте кода показано, как определить метод Configure и добавить конечную точку службы, поведение конечной точки и поведение служб.
public class Service1 : IService1
{
public static void Configure(ServiceConfiguration config)
{
ServiceEndpoint se = new ServiceEndpoint(new ContractDescription("IService1"), new BasicHttpBinding(), new EndpointAddress("basic"));
se.Behaviors.Add(new MyEndpointBehavior());
config.AddServiceEndpoint(se);
config.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
config.Description.Behaviors.Add(new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });
}
public string GetData(int value)
{
return $"You entered: {value}";
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
Чтобы включить для службы протокол (например, HTTPS), следует явно добавить конечную точку, использующую протокол, или автоматически добавить конечные точки с помощью привязки ServiceConfiguration.EnableProtocol, которая добавляет конечную точку для каждого базового адреса, совместимого с использованием определенного протокола и каждого контракта службы. В следующем примере кода показывается, как использовать метод ServiceConfiguration.EnableProtocol:
public class Service1 : IService1
{
public string GetData(int value);
public static void Configure(ServiceConfiguration config)
{
// Enable "Add Service Reference" support
config.Description.Behaviors.Add( new ServiceMetadataBehavior { HttpGetEnabled = true });
// set up support for http, https, net.tcp, net.pipe
config.EnableProtocol(new BasicHttpBinding());
config.EnableProtocol(new BasicHttpsBinding());
config.EnableProtocol(new NetTcpBinding());
config.EnableProtocol(new NetNamedPipeBinding());
// add an extra BasicHttpBinding endpoint at http:///basic
config.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(),"basic");
}
}
Параметры в <protocolMappings> разделе используются только в том случае, если конечные точки приложения не добавляются ServiceConfiguration программным способом. При необходимости можно загрузить конфигурацию службы из файла конфигурации приложения по умолчанию, вызвав LoadFromConfiguration и изменив параметры. Класс LoadFromConfiguration() также позволяет загрузить конфигурацию из централизованной конфигурации. В следующем примере кода показано, как это реализовать.
public class Service1 : IService1
{
public void DoWork();
public static void Configure(ServiceConfiguration config)
{
config.LoadFromConfiguration(ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = @"c:\sharedConfig\MyConfig.config" }, ConfigurationUserLevel.None));
}
}
Внимание
Обратите внимание, что LoadFromConfiguration игнорирует параметры <host> в теге <service><system.serviceModel>. Концептуально речь <host> идет о конфигурации узла, а не конфигурации службы, и она загружается перед выполнением метода Configure.
См. также
- Настройка служб с использованием файлов конфигурации
- Настройка поведения клиентов
- Упрощенная конфигурация
- Конфигурация
- Активация на основе конфигурации в IIS и WAS
- Конфигурация и поддержка метаданных
- Конфигурация
- Как определить привязку службы в конфигурации
- Практическое руководство. Создание конечной точки службы в конфигурации
- Практическое руководство. Публикация метаданных для службы с использованием файла конфигурации
- Как настроить привязку клиента в конфигурации