Creación de servicios interoperables de WS-I Basic Profile 1.1

Para configurar el punto de conexión de un servicio WCF de manera que este sea interoperable con clientes de servicios web de ASP.NET, siga los pasos que se muestran a continuación:

  • Utilice el tipo System.ServiceModel.BasicHttpBinding como tipo de enlace para su extremo de servicio.

  • No utilice devolución de llamada sino características de contrato de sesión o comportamientos de transacción en su extremo de servicio

Puede habilitar opcionalmente el soporte para HTTPS y la autenticación del cliente del nivel de transporte en el enlace.

Las características siguientes de la clase BasicHttpBinding requieren la funcionalidad más allá de WS-I Basic Profile 1.1:

  • Codificación de mensajes del Mecanismo de optimización de transmisión del mensajes (MTOM) controlada por la propiedad BasicHttpBinding.MessageEncoding. Para no utilizar MTOM, deje esta propiedad en su valor predeterminado, WSMessageEncoding.Text.

  • La seguridad de mensaje que controla el valor BasicHttpBinding.Security proporciona compatibilidad con WS-Security conforme a WS-I Basic Security Profile 1.0. Deje esta propiedad en su valor predeterminado, que es SecurityMode.Transport, para no usar WS-Security.

Para hacer que los metadatos de un servicio WCF estén disponibles para su uso con ASP.NET, use las siguientes herramientas de generación de cliente de servicio web: Herramienta Lenguaje de descripción de servicios web (Wsdl.exe), Herramienta Descubrimiento de servicios web (Disco.exe) y la característica Agregar referencia web de Visual Studio. Habilite también la publicación de metadatos. Para obtener más información, consulte Publicación de puntos de conexión de metadatos.

Ejemplo

Descripción

En el siguiente código de ejemplo, se muestra cómo agregar un punto de conexión WCF que sea compatible con los clientes de servicios web de ASP.NET mediante código y, alternativamente, mediante el uso de un archivo de configuración.

Código

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;

[ServiceContract]
public interface IEcho
{
    [OperationContract]
    string Echo(string s);
}

public class MyService : IEcho
{
    public string Echo(string s)
    {
        return s;
    }
}

class Program
{
    static void Main(string[] args)
    {
        string baseAddress = "http://localhost:8080/wcfselfhost/";
        ServiceHost host = new ServiceHost(typeof(MyService), new Uri(baseAddress));

        // Create a BasicHttpBinding instance
        BasicHttpBinding binding = new BasicHttpBinding();

        // Add a service endpoint using the created binding
        host.AddServiceEndpoint(typeof(IEcho), binding, "echo1");

        host.Open();
        Console.WriteLine("Service listening on {0} . . .", baseAddress);
        Console.ReadLine();
        host.Close();
    }
}

Imports System.Collections.Generic
Imports System.Text
Imports System.ServiceModel
Imports System.ServiceModel.Description

<ServiceContract()> _
Public Interface IEcho

    <OperationContract()> _
    Function Echo(ByVal s As String) As String

End Interface

Public Class MyService
    Implements IEcho

    Public Function Echo(ByVal s As String) As String Implements IEcho.Echo
        Return s
    End Function

End Class

Friend Class Program

    Shared Sub Main(ByVal args() As String)
        Dim baseAddress = "http://localhost:8080/wcfselfhost/"
        Dim host As New ServiceHost(GetType(MyService), _
                                    New Uri(baseAddress))

        ' Add a service endpoint using the created binding
        With host
            .AddServiceEndpoint(GetType(IEcho), _
                                New BasicHttpBinding(), _
                                "echo1")
            .Open()
            Console.WriteLine("Service listening on {0} . . .", _
                              baseAddress)
            Console.ReadLine()
            .Close()
        End With
    End Sub
End Class
<configuration>
  <system.serviceModel>
    <services>
      <service name="MyService" behaviorConfiguration="HttpGetMetadata">
        <endpoint address="echo2" contract="IEcho" binding="basicHttpBinding" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="HttpGetMetadata">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Consulte también