Cómo: Configurar servicios WCF para interoperar con clientes de servicios web ASP.NET

Para configurar un extremo de servicio de Windows Communication Foundation (WCF) para que sea interoperable con clientes de servicios web ASP.NET, utilice el tipo System.ServiceModel.BasicHttpBinding como el tipo de enlace de su extremo 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 ASP.NET no admiten la codificación de mensajes del MTOM, por lo que la propiedad System.ServiceModel.BasicHttpBinding.MessageEncoding debería quedar dejarse en su valor predeterminado, que es System.ServiceModel.WSMessageEncoding.Text. Los clientes de servicios web de ASP.NET no admiten WS-Security, por lo que la System.ServiceModel.BasicHttpBinding.Security debería estar establecida en Transport.

Para poner los medatados de un servicio de WCF a disposición de las herramientas de generación de proxies de servicios web de ASP.NET (esto es, 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 extremo de metadatos de HTTP/GET.

Para agregar un extremo de WCF que sea compatible con clientes del servicio web de ASP.NET mediante código

  1. Cree una nueva instancia de BasicHttpBinding

  2. De manera opcional, habilite la seguridad de transporte para este enlace de extremo de servicio estableciendo el modo de seguridad para el enlace en Transport. Para obtener detalles, vea 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 obtener detalles sobre cómo agregar un extremo de servicio mediante código, vea Cómo crear un extremo de servicio en código.

  4. Habilite un extremo de metadatos HTTP/GET para su servicio. Para obtener información detallada, vea Publicación de metadatos para un servicio mediante código.

Para agregar un extremo WCF que sea compatible con clientes de servicio web de ASP.NET en un archivo de configuración

  1. Cree una nueva configuración de enlace BasicHttpBinding. Para obtener más información, consulte Cómo: Especificar 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 obtener información detallada, consulte Seguridad de transporte.

  3. Configure un nuevo extremo de la aplicación para su servicio utilizando la configuración de enlace que acaba de crear. Para obtener detalles sobre cómo agregar un extremo de servicio en un archivo de configuración, vea Cómo crear un extremo de servicio en configuración.

  4. Habilite un extremo de metadatos HTTP/GET para su servicio. Para obtener más información, consulte Cómo publicar metadatos para un servicio mediante un archivo de configuración.

Ejemplo

El código de ejemplo siguiente muestra cómo agregar un extremo WCF que es compatible con clientes de servicios Web ASP.NET en código y, alternativamente, en archivos de configuración.

Imports System
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 = "https://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
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 = "https://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();
    }
}
<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>

Vea también

Tareas

Cómo crear un extremo de servicio en código
Publicación de metadatos para un servicio mediante código
Cómo: Especificar un enlace de servicio en la configuración
Cómo crear un extremo de servicio en configuración
Cómo publicar metadatos para un servicio mediante un archivo de configuración

Conceptos

Utilización de los metadatos

Otros recursos

Seguridad de transporte