Como: Configurar o serviço WCF para interoperar com ASP.NET clientes de serviço Web

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

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

Para disponibilizar os metadados de um serviço WCF para ASP.NET ferramentas de geração de proxy de serviço Web (ou seja, Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (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. Criar uma nova BasicHttpBinding instância

  2. Opcionalmente, habilite a segurança de transporte para esta vinculaçã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 vinculação que você 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 obter detalhes, consulte Como publicar metadados para um serviço usando código.

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

  1. Crie uma nova BasicHttpBinding configuração de vinculação. 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 vinculaçã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 em configuração.

  4. Habilite um ponto de extremidade de metadados HTTP/GET para seu serviço. Para obter 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 que é compatível com ASP.NET clientes de serviço Web no código e, alternativamente, 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>

Consulte também