Редактиране

Споделяне чрез


How to: Configure WCF Service to Interoperate with ASP.NET Web Service Clients

To configure a Windows Communication Foundation (WCF) service endpoint to be interoperable with ASP.NET Web service clients, use the System.ServiceModel.BasicHttpBinding type as the binding type for your service endpoint.

You can optionally enable support for HTTPS and transport-level client authentication on the binding. ASP.NET Web service clients do not support MTOM message encoding, so the BasicHttpBinding.MessageEncoding property should be left as its default value, which is WSMessageEncoding.Text. ASP.NET Web Service clients do not support WS-Security, so the BasicHttpBinding.Security should be set to Transport.

To make the metadata for a WCF service available to ASP.NET Web service proxy generation tools (that is, Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (Disco.exe), and the Add Web Reference feature in Visual Studio), you should expose an HTTP/GET metadata endpoint.

Add an endpoint in code

  1. Create a new BasicHttpBinding instance

  2. Optionally enable transport security for this service endpoint binding by setting the security mode for the binding to Transport. For details, see Transport Security.

  3. Add a new application endpoint to your service host using the binding instance that you just created. For details about how to add a service endpoint in code, see the How to: Create a Service Endpoint in Code.

  4. Enable an HTTP/GET metadata endpoint for your service. For details see How to: Publish Metadata for a Service Using Code.

Add an endpoint in a configuration file

  1. Create a new BasicHttpBinding binding configuration. For details, see the How to: Specify a Service Binding in Configuration.

  2. Optionally enable transport security for this service endpoint binding configuration by setting the security mode for the binding to Transport. For details, see Transport Security.

  3. Configure a new application endpoint for your service using the binding configuration that you just created. For details about how to add a service endpoint in a configuration file, see the How to: Create a Service Endpoint in Configuration.

  4. Enable an HTTP/GET metadata endpoint for your service. For details see the How to: Publish Metadata for a Service Using a Configuration File.

Example

The following example code demonstrates how to add a WCF endpoint that is compatible with ASP.NET Web service clients in code and alternatively in configuration files.

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>

See also