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
Crie uma nova instância BasicHttpBinding
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.
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.
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
Crie uma nova configuração de associação BasicHttpBinding. Para obter detalhes, consulte Como especificar uma associação de serviço na configuração.
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.
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.
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
- Como: criar um ponto de extremidade de serviço em código
- Como: publicar metadados utilizando código para um serviço
- Como: especificar uma associação de serviço na configuração
- Como: criar um ponto de extremidade de serviço em configuração
- Como: publicar metadados para um serviço usando um arquivo de configuração
- Segurança de transporte
- Utilizando metadados