Compartir a través de


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

Para configurar un punto de conexión de servicio WCF para que sea interoperable con ASP.NET clientes de servicio web:

  • 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 siguientes características de la BasicHttpBinding clase requieren funcionalidad más allá de WS-I Perfil básico 1.1:

  • Codificación de mensajes del Mecanismo de optimización de transmisión de mensajes (MTOM) controlada por la propiedad BasicHttpBinding.MessageEncoding. Deje esta propiedad en su valor predeterminado, que es WSMessageEncoding.Text para no usar MTOM.

  • 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 que los metadatos de un servicio WCF estén disponibles para ASP.NET, use las herramientas de generación de cliente del servicio web: Herramienta de lenguaje de descripción de servicios web (Wsdl.exe), Herramienta de detección de servicios web (Disco.exe) y la característica Agregar referencia web en Visual Studio. Habilite la publicación de metadatos. Para obtener más información, consulte Publishing Metadata Endpoints (Puntos de conexión de metadatos de publicación).

Ejemplo

Descripción

En el código de ejemplo siguiente se muestra cómo agregar un punto de conexión WCF compatible con ASP.NET clientes de servicio web en el código y, como alternativa, en 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 {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