Creación de servicios interoperables de WS-I Basic Profile 1.1
Para configurar un extremo del servicio WCF para ser interoperable con clientes de servicios Web ASP.NET:
Utilice el tipo System.ServiceModel.BasicHttpBinding como tipo de enlace para su extremo de servicio.
No utilice devolución de llamada sino características de contrato de sesión o comportamientos de transacción en su extremo de servicio
Puede habilitar opcionalmente el soporte para HTTPS y la autenticación del cliente del nivel de transporte en el enlace.
Las características siguientes de la clase BasicHttpBinding requieren la funcionalidad más allá de WS-I Basic Profile 1.1:
Codificación de mensajes del Mecanismo de optimización de transmisión del mensajes (MTOM) controlada por la propiedad System.ServiceModel.BasicHttpBinding.MessageEncoding. Deje esta propiedad en su valor predeterminado, que es System.ServiceModel.WSMessageEncoding.Text para no utilizar MTOM.
La seguridad de mensaje que controla el valor System.ServiceModel.BasicHttpBinding.Security proporciona compatibilidad con WS-Security conforme a WS-I Basic Security Profile 1.0. Deje esta propiedad en su valor predeterminado, que es System.ServiceModel.SecurityMode.Transport, para no usar WS-Security.
Para que los metadatos para un servicio WCF estén disponibles para ASP.NET, utilice las herramientas de cliente de servicio Web: Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (Disco.exe), y la característica Add Web Reference en Visual Studio; debe habilitar la publicación de metadatos. Para obtener más información, vea Publicación de extremos de metadatos.
Ejemplo
Descripción
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.
Código
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>