Como: configurar um serviço do WCF para interoperar com os clientes de serviço Web do ASP.NET

Para configurar um ponto de extremidade de serviço do WCF (Windows Communication Foundation) para ser interoperável com clientes de serviço Web ASP.NET, use o tipo System.ServiceModel.BasicHttpBinding como o tipo de associação para o ponto de extremidade de serviço.

Opcionalmente, você pode habilitar o suporte para a autenticação de cliente em nível de transporte e HTTPS na associação. Os clientes de serviço Web ASP.NET não dão suporte à codificação de mensagens MTOM, portanto, a propriedade BasicHttpBinding.MessageEncoding deve ser deixada como seu valor padrão, que é WSMessageEncoding.Text. Os clientes do serviço Web ASP.NET não dão suporte ao WS-Security, portanto, o BasicHttpBinding.Security deve ser definido como Transport.

Para disponibilizar os metadados de um serviço WCF para ferramentas de geração de proxy de serviço Web ASP.NET (ou seja, Ferramenta de Linguagem de Descrição dos Serviços Web (Wsdl.exe), Ferramenta de Descoberta de Serviços Web (Disco.exe)e o recurso Adicionar Referência da Web no Visual Studio), você deve expor um ponto de extremidade de metadados HTTP/GET.

Adicionar um ponto de extremidade no código

  1. Crie uma nova instância BasicHttpBinding

  2. Opcionalmente, habilite a segurança de transporte para essa associação de ponto de extremidade de serviço definindo o modo de segurança para a associação como Transport. Para obter detalhes, consulte Segurança de Transporte.

  3. Adicione um novo ponto de extremidade de aplicativo ao host de serviço usando a instância de associação que acabou de criar. Para obter detalhes sobre como adicionar um ponto de extremidade de serviço no código, consulte Como criar um ponto de extremidade de serviço no código.

  4. Habilite um ponto de extremidade de metadados HTTP/GET para seu serviço. Para mais detalhes, consulte Como publicar metadados para um serviço utilizando código.

Adicionar um ponto de extremidade em um arquivo de configuração

  1. Crie uma nova configuração de associação BasicHttpBinding. Para obter detalhes, consulte Como especificar uma associação de serviço na configuração.

  2. Opcionalmente, habilite a segurança de transporte para essa configuração de associação de ponto de extremidade de serviço definindo o modo de segurança para a associação como Transport. Para obter detalhes, consulte Segurança de Transporte.

  3. Configure um novo ponto de extremidade de aplicativo para seu serviço usando a configuração de associação que você acabou de criar. Para obter detalhes sobre como adicionar um ponto de extremidade de serviço em um arquivo de configuração, consulte Como criar um ponto de extremidade de serviço na configuração.

  4. Habilite um ponto de extremidade de metadados HTTP/GET para seu serviço. Para obter mais detalhes, consulte Como publicar metadados para um serviço usando um arquivo de configuração.

Exemplo

O código de exemplo a seguir demonstra como adicionar um ponto de extremidade WCF compatível com clientes de serviço Web ASP.NET no código e, como alternativa, em arquivos de configuração.

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>

Confira também