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 System.ServiceModel.BasicHttpBinding.MessageEncoding property should be left as its default value, which is System.ServiceModel.WSMessageEncoding.Text. ASP.Net Web Service clients do not support WS-Security, so the System.ServiceModel.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.
To add a WCF endpoint that is compatible with ASP.NET Web service clients in code
Create a new BasicHttpBinding instance
Optionally enable transport security for this service endpoint binding by setting the security mode for the binding to Transport. For details, please see Transport Security.
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.
Enable an HTTP/GET metadata endpoint for your service. For details see How to: Publish Metadata for a Service Using Code.
To add a WCF endpoint that is compatible with ASP.NET Web service clients in a configuration file
Create a new BasicHttpBinding binding configuration. For details, see the How to: Specify a Service Binding in Configuration.
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.
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.
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.
Imports System
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 = "https://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
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 = "https://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();
}
}
<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>
<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>
<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
Tasks
How to: Create a Service Endpoint in Code
How to: Publish Metadata for a Service Using Code
How to: Specify a Service Binding in Configuration
How to: Create a Service Endpoint in Configuration
How to: Publish Metadata for a Service Using a Configuration File