Procedimiento para configurar servicios WCF para interoperar con clientes de servicios web ASP.NET

Para configurar un punto de conexión de servicio de Windows Communication Foundation (WCF) para que sea interoperable con clientes de servicios web de ASP.NET, utilice el tipo System.ServiceModel.BasicHttpBinding como tipo de enlace del punto de conexión de servicio.

Puede habilitar opcionalmente el soporte para HTTPS y la autenticación del cliente del nivel de transporte en el enlace. Los clientes de servicios web de ASP.NET no admiten la codificación de mensajes de MTOM, por lo que la propiedad BasicHttpBinding.MessageEncoding debería dejarse en su valor predeterminado, que es WSMessageEncoding.Text. Los clientes de servicios web de ASP.NET no admiten WS-Security, por lo que la propiedad BasicHttpBinding.Security debería establecerse en Transport.

Para que los metadatos de un servicio WCF estén disponibles para las herramientas de generación de servidores proxy de servicios web de ASP.NET (es decir, Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (Disco.exe) y la característica Agregar referencia web de Visual Studio), debería exponer un punto de conexión de metadatos de HTTP/GET.

Adición de un punto de conexión en el código

  1. Cree una nueva instancia de BasicHttpBinding

  2. De manera opcional, habilite la seguridad de transporte para este enlace de punto de conexión de servicio estableciendo el modo de seguridad para el enlace en Transport. Para más información, consulte Seguridad de transporte.

  3. Agregue un nuevo extremo de la aplicación a su host de servicio mediante la instancia de enlace que acaba de crear. Para más información sobre cómo agregar un punto de conexión de servicio en el código, consulte Creación de un punto de conexión de servicio en el código.

  4. Habilite un punto de conexión de metadatos HTTP/GET para su servicio. Para más información, consulte Publicación de metadatos para un servicio mediante código.

Adición de un punto de conexión en un archivo de configuración

  1. Cree una nueva configuración de enlace BasicHttpBinding. Para más información, consulte Especificación de un enlace de servicio en la configuración.

  2. De manera opcional, habilite la seguridad de transporte para esta configuración de enlace de extremo de servicio estableciendo el modo de seguridad para el enlace en Transport. Para más información, consulte Seguridad de transporte.

  3. Configure un nuevo punto de conexión de la aplicación para su servicio utilizando la configuración de enlace que acaba de crear. Para más información sobre cómo agregar un punto de conexión de servicio en un archivo de configuración, consulte Creación de un punto de conexión de servicio en la configuración.

  4. Habilite un punto de conexión de metadatos HTTP/GET para su servicio. Para más información, consulte Publicación de metadatos para un servicio mediante un archivo de configuración.

Ejemplo

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 en el código y, alternativamente, en los archivos de configuración.

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