Procedura: configurare un servizio WCF che interagisca con client di servizi Web ASP.NET
Per configurare un endpoint del servizio Windows Communication Foundation (WCF) per l'interoperabilità con ASP.NET client del servizio Web, usare il tipo System.ServiceModel.BasicHttpBinding come tipo di binding per l'endpoint del servizio.
È possibile, se lo si desidera, attivare nell'associazione il supporto per HTTPS e l'autenticazione del client a livello di trasporto. I client di servizi Web ASP.NET non supportano la codifica messaggi MTOM, pertanto la proprietà BasicHttpBinding.MessageEncoding deve essere lasciata con il suo valore predefinito WSMessageEncoding.Text. I client di servizi Web ASP.NET non supportano WS-Security, pertanto BasicHttpBinding.Security deve essere impostato su Transport.
Per rendere disponibili i metadati per un servizio WCF agli strumenti di generazione di proxy di servizi Web ASP.NET (ovvero Strumento del linguaggio di descrizione dei servizi Web (Wsdl.exe), Strumento di individuazione Servizi Web (Disco.exe) e la funzionalità Aggiungi riferimento Web di Visual Studio), è necessario esporre un endpoint dei metadati HTTP/GET.
Aggiungere un endpoint nel codice
Creare una nuova istanza BasicHttpBinding.
Attivare facoltativamente la protezione del trasporto per questa associazione dell'endpoint del servizio impostando la modalità di sicurezza per l'associazione su Transport. Per informazioni dettagliate, vedere Sicurezza del trasporto.
Aggiungere un nuovo endpoint applicazione all'host del servizio utilizzando l'istanza di associazione appena creata. Per informazioni dettagliate su come aggiungere un endpoint di servizio nel codice, vedere Procedura: Creare un endpoint di servizio nel codice.
Attivare un endpoint dei metadati HTTP/GET per il servizio. Per informazioni dettagliate, vedere Procedura: Pubblicare metadati per un servizio tramite codice.
Aggiungere un endpoint in un file di configurazione
Creare una nuova configurazione dell'associazione BasicHttpBinding. Per informazioni dettagliate, vedere Procedura: Specificare un binding di servizi nella configurazione.
Attivare facoltativamente la protezione del trasporto per questa configurazione dell'associazione dell'endpoint del servizio impostando la modalità di sicurezza per l'associazione su Transport. Per informazioni dettagliate, vedere Sicurezza del trasporto.
Configurare un nuovo endpoint applicazione per il servizio utilizzando la configurazione dell'associazione appena creata. Per informazioni dettagliate su come aggiungere un endpoint di servizio in un file di configurazione, vedere la Procedura: Creare un endpoint di servizio nella configurazione.
Attivare un endpoint dei metadati HTTP/GET per il servizio. Per informazioni dettagliate, vedere Procedura: Pubblicare metadati per un servizio tramite un file di configurazione.
Esempio
Nell'esempio di codice seguente viene illustrato come aggiungere un endpoint WCF compatibile con i client del servizio Web ASP.NET nel codice e, in alternativa, nei file di configurazione.
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>
Vedi anche
- Procedura: Creare un endpoint di servizio nel codice
- Procedura: Pubblicare metadati per un servizio usando il codice
- Procedura: Specificare un'associazione al servizio nella configurazione
- Procedura: Creare un endpoint di servizio nella configurazione
- Procedura: Pubblicare metadati per un servizio usando un file di configurazione
- Sicurezza del trasporto
- Uso di metadati