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>
<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
int main() {
std::cout << "Hello World!" << std::endl;
std::cin.get();
return 0;
}
- 3/7/2012
- hoggbrain901