Поделиться через


Как задать привязку службы в конфигурации

В этом примере контракт ICalculator определен для базовой службы калькулятора, служба реализуется в классе CalculatorService, а затем ее конечная точка настраивается в файле Web.config с указанием того, что служба использует класс BasicHttpBinding. Описание настройки этой службы с помощью кода вместо файла конфигурации см. в разделе Как задать привязку службы в коде.

В большинстве случаев рекомендуется указывать привязку и адрес декларативно в конфигурации, а не принудительно в коде. Как правило, определять конечные точки в коде непрактично, поскольку привязки и адреса для развернутой службы чаще всего отличаются от привязок и адресов, используемых в процессе разработки службы. В общем случае, если не указывать привязку и адрес в коде, их можно изменять без повторной компиляции или повторного развертывания приложения.

Все перечисленные ниже этапы конфигурации можно выполнить с помощью программы Средство редактирования конфигурации (SvcConfigEditor.exe).

Копию исходного кода этого примера см. в разделе BasicBinding.

Указание привязки BasicHttpBinding, используемой для настройки службы

  1. Определите контракт службы для данного типа службы.

      <ServiceContract()> _
    Public Interface ICalculator
          <OperationContract()> _
          Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
          <OperationContract()> _
          Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
          <OperationContract()> _
          Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
          <OperationContract()> _
          Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
      End Interface
    
    [ServiceContract]
    public interface ICalculator
    {
       [OperationContract]
       double Add(double n1, double n2);
       [OperationContract]
       double Subtract(double n1, double n2);
       [OperationContract]
       double Multiply(double n1, double n2);
       [OperationContract]
       double Divide(double n1, double n2);
    }
    
  2. Реализуйте контракт службы в классе службы.

    Public Class CalculatorService
        Implements ICalculator
        Public Function Add(ByVal n1 As Double, _
                            ByVal n2 As Double) As Double Implements ICalculator.Add
            Return n1 + n2
        End Function
        Public Function Subtract(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Subtract
            Return n1 - n2
        End Function
        Public Function Multiply(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Multiply
            Return n1 * n2
        End Function
        Public Function Divide(ByVal n1 As Double, _
                               ByVal n2 As Double) As Double Implements ICalculator.Divide
            Return n1 / n2
        End Function
    End Class
    
    public class CalculatorService : ICalculator
    {
       public double Add(double n1, double n2)
       {
          return n1 + n2;
       }
       public double Subtract(double n1, double n2)
       {
          return n1 - n2;
       }
       public double Multiply(double n1, double n2)
       {
          return n1 * n2;
       }
       public double Divide(double n1, double n2)
       {
          return n1 / n2;
       }
    } 
    
    ms733051.note(ru-ru,VS.100).gifПримечание
    Информация об адресе или привязке не указывается внутри реализации службы. Кроме того, для извлечения этих сведений из файла конфигурации не требуется писать код.

  3. Создайте файл Web.config для настройки конечной точки для CalculatorService, использующей WSHttpBinding.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name=" CalculatorService" >
            <endpoint 
            <-- Leave the address blank to be populated by default-->
            <--from the hosting environment,in this case IIS, so -->
            <-- the address will just be that of the IIS Virtual -->
            <--Directory.-->
                address="" 
            <--Specify the binding type -->
                binding="wsHttpBinding"
            <--Specify the binding configuration name for that -->
            <--binding type. This is optional but useful if you  -->
            <--want to modify the properties of the binding. -->
            <--The bindingConfiguration name Binding1 is defined  -->
            <--below in the bindings element.  -->
                bindingConfiguration="Binding1"
                contract="ICalculator" />
          </service>
        </services>
        <bindings>
          <wsHttpBinding>
            <binding name="Binding1">
              <-- Binding property values can be modified here. -->
              <--See the next procedure. -->
            </binding>
          </wsHttpBinding>
       </bindings>
      </system.serviceModel>
    </configuration>
    
  4. Создайте файл Service.svc, содержащий следующую строку, и поместите его в виртуальный каталог IIS.

    <%@ServiceHost language=c# Service="CalculatorService" %> 
    

Изменение значений по умолчанию для свойств привязки

  1. Чтобы изменить свойства по умолчанию для привязки WSHttpBinding, создайте новое имя конфигурации привязки, <binding name="Binding1">, в элементе <wsHttpBinding>, и задайте новые значения атрибутам привязки в этом элементе привязки. Например, чтобы изменить значения по умолчанию для времени ожидания при открытии и закрытии с 1 минуты на 2 минуты, добавьте следующие строки в файл конфигурации.

          <wsHttpBinding>
            <binding name="Binding1"
                     closeTimeout="00:02:00"
                     openTimeout="00:02:00">
            </binding>
          </wsHttpBinding>
    

См. также

Основные понятия

Использование привязок для настройки служб и клиентов
Задание адреса конечной точки