Compartilhar via


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 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 HTTPS e autenticação de cliente no nível de transporte na associação. ASP.NET clientes de serviço Web não dão suporte à codificação de mensagens MTOM, portanto, a BasicHttpBinding.MessageEncoding propriedade deve ser deixada como seu valor padrão, que é WSMessageEncoding.Text. ASP.NET clientes do Serviço Web 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 ASP.NET ferramentas de geração de proxy de serviço Web (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. Criar uma nova BasicHttpBinding instância

  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 endpoint 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 associaçã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 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 endpoint de aplicativo para o seu serviço usando a configuração de binding 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 endpoint de metadados HTTP/GET para o 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 endpoint WCF que é compatível com clientes de serviço Web ASP.NET, 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 {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