Compartir a través de


Cómo crear un servicio básico de estilo web

Windows Communication Foundation (WCF) le permite crear un servicio que expone un extremo web. Los extremos web envían los datos por XML sin formato, no hay ninguna envoltura SOAP. En este tema se muestra cómo exponer este tipo de extremos.

Nota

La única manera de proteger un extremo web es exponerlo a través de HTTPS, utilizando la seguridad de transporte. Al utilizar la seguridad basada en mensaje, la información de seguridad se coloca normalmente en encabezados SOAP, porque los mensajes enviados a los extremos que no son SOAP no contienen envoltura SOAP, no hay ningún lugar donde colocar la información de seguridad y debe confiar en la seguridad de transporte.

Para crear un extremo web

  1. Defina un contrato de servicios mediante una interfaz marcada con los atributos ServiceContractAttribute, WebInvokeAttribute y WebGetAttribute.

    Nota

    De forma predeterminada, WebInvokeAttribute asigna las llamadas POST a la operación. Puede, sin embargo, especificar el método para asignar a la operación especificando un "método =" parámetro. WebGetAttribute no tiene un "método =" parámetro y sólo asigna llamadas GET a la operación de servicio.

  2. Implemente el contrato de servicios.

Para hospedar el servicio.

  1. Crear un objeto WebServiceHost.

  2. Agregue un ServiceEndpoint al WebHttpBehavior.

    Nota

    Si no agrega un extremo, WebServiceHost crea automáticamente un extremo predeterminado. WebServiceHost también agrega WebHttpBehavior y deshabilita la página de ayuda de HTTP y la funcionalidad GET del lenguaje de descripción de servicios web (WSDL) para que el extremo de metadatos no interfiera con el extremo HTTP predeterminado.

    Agregar un extremo que no es SOAP a una dirección URL de"" causa un comportamiento inesperado cuando se intenta llamar a una operación en el extremo. La razón para esto es que el URI de escucha del extremo es igual al URI de la página de ayuda (la página que se muestra al ir a la dirección base de un servicio de WCF ).

    Para evitar que esto suceda, puede realizar una de las siguientes acciones:

    • Siempre especifique un URI que no esté en blanco para un extremo que no sea SOAP.
    • Desactive la página de ayuda. Esto se puede hacer mediante el siguiente código.
  3. Abra el host del servicio y espere hasta que el usuario presione Entrar.

    Este ejemplo muestra cómo hospedar un servicio de estilo web con una aplicación de consola. También puede hospedar este tipo de servicios dentro de IIS. Para ello, especifique la clase WebServiceHostFactory en un archivo .svc como muestra el siguiente código.

    <%ServiceHost 
        language=c#
        Debug="true"
        Service="Microsoft.Samples.Service"
        Factory=System.ServiceModel.Activation.WebServiceHostFactory%>
    

    En este ejemplo, se configura el host del servicio web obligatoriamente en el código. También puede configurar el host del servicio web en un archivo de configuración de aplicación. El archivo de configuración de aplicación siguiente se puede utilizar para realizar la misma configuración que a través del código antes expuesto.

    <configuration>
      <system.serviceModel>
        <services>
          <service
              name="Microsoft.ServiceModel.Samples.BasicWebProgramming.Service"
              behaviorConfiguration="MyServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="https://localhost:8000/"/>
              </baseAddresses>
            </host>
            <endpoint address="" 
                      binding="webHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.BasicWebProgramming.IService" />
    
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceBehavior">
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

    Para utilizar el archivo de configuración de aplicación, debe realizar algunas modificaciones en el código anterior. Ya no tiene que especificar la dirección base, los comportamientos de servicio ni los extremos en el código. En el siguiente ejemplo, se muestra el código modificado.

     using (WebServiceHost host = new WebServiceHost(typeof(Service)))
          {
              host.Open();
              Console.WriteLine("Service is running");
              Console.WriteLine("Press enter to quit...");
              Console.ReadLine();
              host.Close();
    }
    

Realización de llamadas a las operaciones de servicio asignadas a GET en Internet Explorer

  1. Abra Internet Explorer y escriba "https://localhost:8000/EchoWithGet? s=¡Hola, mundo!" y presione Entrar. La dirección URL contiene la dirección base del servicio ("https://localhost:8000/"), la dirección relativa del extremo (""), la operación del servicio que se ha de llamar ("EchoWithGet") y un signo de interrogación seguido por una lista de parámetros con nombre separados por una Y comercial (&).

Realización de llamadas a operaciones de servicio mediante código

  1. Cree una instancia de ChannelFactory dentro de un bloque using.

  2. Agregue WebHttpBehavior al extremo que ChannelFactory llamará.

  3. Cree el canal y llame al servicio.

  4. Cierre el WebServiceHost.

Ejemplo

A continuación, se muestra una lista de código completa en este ejemplo.

Compilar el código

Al compilar Service.cs, haga una referencia a System.ServiceModel.dll y a System.ServiceModel.Web.dll.

Consulte también

Referencia

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior