Freigeben über


Vorgehensweise: Konfigurieren eines WCF-Diensts für die Zusammenarbeit mit ASP.NET-Webdienstclients

Wenn Sie einen Windows Communication Foundation (WCF)-Dienstendpunkt so konfigurieren möchten, dass er mit ASP.NET-Webdienstclients interoperabel ist, verwenden Sie den Typ System.ServiceModel.BasicHttpBinding als Bindungstyp für Ihren Dienstendpunkt.

Sie können für die Bindung auch Unterstützung für HTTPS und Clientauthentifizierung auf Transportebene aktivieren. Weil ASP.NET-Webdienstclients die MTOM-Nachrichtencodierung nicht unterstützen, sollte die Eigenschaft BasicHttpBinding.MessageEncoding ihren Standardwert, WSMessageEncoding.Text, behalten. Weil ASP.NET-Webdienstclients WS-Sicherheit nicht unterstützen, sollte BasicHttpBinding.Security auf Transport festgelegt werden.

Wenn Sie die Metadaten für einen WCF-Dienst den Tools zur ASP.NET-Webdienst-Proxygenerierung (d. h. dem Web Services Description Language Tool (Wsdl.exe), dem Web Services Discovery Tool (Disco.exe) und der Funktion Webverweis hinzufügen von Visual Studio) verfügbar machen möchten, sollten Sie einen HTTP/GET-Metadatenendpunkt freigeben.

Hinzufügen eines Endpunkts im Code

  1. Erstellen Sie eine neue BasicHttpBinding-Instanz.

  2. Aktivieren Sie optional Transportsicherheit für diese Dienstendpunktbindung, indem Sie den Sicherheitsmodus für die Bindung auf Transport festlegen. Ausführliche Informationen finden Sie unter Transportsicherheit.

  3. Fügen Sie dem Diensthost einen neuen Anwendungsendpunkt mit der Bindungsinstanz hinzu, die Sie soeben erstellt haben. Ausführliche Informationen zum Hinzufügen eines Dienstendpunkts im Code finden Sie unter Vorgehensweise: Erstellen eines Dienstendpunkts im Code.

  4. Aktivieren Sie einen HTTP/GET-Metadatenendpunkt für Ihren Dienst. Ausführliche Informationen finden Sie unter Vorgehensweise: Veröffentlichen von Metadaten für einen Dienst über Code.

Hinzufügen eines Endpunkts in einer Konfigurationsdatei

  1. Erstellen Sie eine neue BasicHttpBinding-Bindungskonfiguration. Ausführliche Informationen finden Sie unter Vorgehensweise: Angeben einer Dienstbindung in einer Konfiguration.

  2. Aktivieren Sie optional Transportsicherheit für diese Dienstendpunkt-Bindungskonfiguration, indem Sie den Sicherheitsmodus für die Bindung auf Transport festlegen. Ausführliche Informationen finden Sie unter Transportsicherheit.

  3. Konfigurieren Sie einen neuen Anwendungsendpunkt für Ihren Dienst, indem Sie die Bindungskonfiguration verwenden, die Sie gerade erstellt haben. Ausführliche Informationen zum Hinzufügen eines Dienstendpunkts in einer Konfigurationsdatei finden Sie unter Vorgehensweise: Erstellen eines Dienstendpunkts in einer Konfiguration.

  4. Aktivieren Sie einen HTTP/GET-Metadatenendpunkt für Ihren Dienst. Ausführliche Informationen finden Sie unter Vorgehensweise: Veröffentlichen von Metadaten für einen Dienst mithilfe einer Konfigurationsdatei.

Beispiel

Der folgende Beispielcode veranschaulicht, wie ein WCF-Endpunkt hinzugefügt wird, der mit ASP.NET-Webdienstclients im Code und alternativ in Konfigurationsdateien kompatibel ist.

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>

Siehe auch