Dela via


Anvisningar: Konfigurera WCF-tjänsten så att den samverkar med ASP.NET webbtjänstklienter

Om du vill konfigurera en tjänstslutpunkt för Windows Communication Foundation (WCF) så att den kan samverka med ASP.NET webbtjänstklienter använder du System.ServiceModel.BasicHttpBinding typ som bindningstyp för tjänstslutpunkten.

Du kan också aktivera stöd för HTTPS- och transportnivåklientautentisering på bindningen. ASP.NET webbtjänstklienter stöder inte MTOM-meddelandekodning, så BasicHttpBinding.MessageEncoding-egenskapen bör lämnas som standardvärde, vilket är WSMessageEncoding.Text. ASP.NET-webbtjänstklienter stöder inte WS-Security, så BasicHttpBinding.Security bör anges till Transport.

Om du vill göra metadata för en WCF-tjänst tillgängliga för ASP.NET verktyg för webbtjänstproxygenerering (d.v.s. Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (Disco.exe)och funktionen Lägg till webbreferens i Visual Studio) bör du exponera en HTTP/GET-metadataslutpunkt.

Lägga till en slutpunkt i kod

  1. Skapa en ny BasicHttpBinding-instans

  2. Du kan också aktivera transportsäkerhet för den här tjänstslutpunktsbindningen genom att ange säkerhetsläget för bindningen till Transport. Mer information finns i Transport Security.

  3. Lägg till en ny programslutpunkt till tjänstvärden med den bindningsinstans som du nyss skapade. Mer information om hur du lägger till en tjänstslutpunkt i kod finns i How to: Create a Service Endpoint in Code.

  4. Aktivera en HTTP/GET-metadataslutpunkt för din tjänst. Mer information finns i How to: Publish Metadata for a Service Using Code.

Lägga till en slutpunkt i en konfigurationsfil

  1. Skapa en ny BasicHttpBinding bindningskonfiguration. Mer information finns i Så här anger du en tjänstbindning i Konfiguration.

  2. Du kan också aktivera transportsäkerhet för den här tjänstslutpunktsbindningskonfigurationen genom att ange säkerhetsläget för bindningen till Transport. Mer information finns i Transport Security.

  3. Konfigurera en ny programslutpunkt för din tjänst med hjälp av bindningskonfigurationen som du nyss skapade. Mer information om hur du lägger till en tjänstslutpunkt i en konfigurationsfil finns i How to: Create a Service Endpoint in Configuration.

  4. Aktivera en HTTP/GET-metadataslutpunkt för din tjänst. För detaljer, se Hur du: Publicerar metadata för en tjänst med en konfigurationsfil.

Exempel

Följande exempelkod visar hur du lägger till en WCF-slutpunkt som är kompatibel med ASP.NET webbtjänstklienter i kod och alternativt i konfigurationsfiler.

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>

Se även