Creating WS-I Basic Profile 1.1 Interoperable Services
To configure a 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.
-
Do not use callback and session contract features or transaction behaviors on your service endpoint
You can optionally enable support for HTTPS and transport-level client authentication on the binding.
The following features of the BasicHttpBinding class require functionality beyond WS-I Basic Profile 1.1:
-
Message Transmission Optimization Mechanism (MTOM) message encoding controlled by the System.ServiceModel.BasicHttpBinding.MessageEncoding property. Leave this property at its default value, which is System.ServiceModel.WSMessageEncoding.Text to not use MTOM.
-
Message security controlled by the System.ServiceModel.BasicHttpBinding.Security value provides WS-Security support compliant with WS-I Basic Security Profile 1.0. Leave this property at its default value, which is System.ServiceModel.SecurityMode.Transport to not use WS-Security.
To make the metadata for a WCF service available to ASP.NET, use the Web service client generation tools: Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (Disco.exe), and the Add Web Reference feature in Visual Studio; you must enable metadata publication. For more information, see Publishing Metadata Endpoints.
Example
Description
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.
Code
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(); } }
<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
Build Date: