Share via


Cómo: Especificar un enlace de servicio en la configuración

En este ejemplo, se define un contrato ICalculator para un servicio de calculadora básico; el servicio se implementa en la clase CalculatorService y, después, su extremo se configura en el archivo Web.config, donde se especifica que el servicio usa BasicHttpBinding. Para una descripción de cómo configurar este servicio utilizando código en lugar de una configuración, vea Cómo: Especificar un enlace de servicio en el código.

Normalmente es el mejor procedimiento para especificar el enlace y la información de dirección de forma declarativa en configuración en lugar de hacerlo de forma imperativa en código. Normalmente, no resulta muy práctico definir los extremos en el código ya que los enlaces y las direcciones de un servicio implementado son, por lo general, diferentes de los utilizados durante el desarrollo del servicio. Más generalmente, manteniendo el enlace y la información de dirección fuera del código permite cambiarlos sin tener que volver a compilar o implementar la aplicación.

Todos los pasos de configuración siguientes se pueden realizar utilizando Herramienta del editor de configuración (SvcConfigEditor.exe).

Para la copia de origen de este ejemplo, vea BasicBinding.

Para especificar BasicHttpBinding para utilizarlo para configurar el servicio

  1. Defina un contrato de servicios para el tipo de servicio.

      <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. Implemente el contrato de servicios en una clase de servicio.

    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(es-es,VS.100).gifNota:
    La información de dirección o enlace no se especifica dentro de la implementación del servicio. Por lo tanto, el código no tiene que escribirse para recuperar esa información del archivo de configuración.

  3. Cree un archivo Web.config para configurar un extremo para CalculatorService que utiliza 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. Cree un archivo Service.svc que contenga la línea siguiente y colóquelo en su directorio virtual de Internet Information Services (IIS).

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

Para modificar los valores predeterminados de las propiedades de enlace

  1. Para modificar uno de los valores de propiedad predeterminados de WSHttpBinding, cree un nuevo nombre de la configuración de enlace (<binding name="Binding1"><wsHttpBinding>) dentro del elemento y establezca los nuevos valores para los atributos del enlace en este elemento de enlace. Por ejemplo, para cambiar los valores predeterminados de abrir y cerrar el tiempo de espera de 1 minuto a 2 minutos, agregue el siguiente al archivo de configuración.

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

Vea también

Conceptos

Utilización de enlaces para configurar servicios y clientes
Especificación de una dirección de extremo