Condividi tramite


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

  1. Creare una nuova istanza BasicHttpBinding.

  2. 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.

  3. 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.

  4. 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

  1. Creare una nuova configurazione dell'associazione BasicHttpBinding. Per informazioni dettagliate, vedere Procedura: Specificare un binding di servizi nella configurazione.

  2. 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.

  3. 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.

  4. 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