1°) Création de l'interface du service

namespace MyLibrary
{
    [ServiceContract]
    public interface IMyInterface
    {
        [OperationContract]
        string GetHello(string value);
    }
}

2°) Implémentation de l'interface du service

namespace MyLibrary
{
    [ServiceBehavior]
    public class MyServer : IMyInterface
    {
        public string GetHello(string value)
        {
            return "Hello " + value;
        }
    }
}

3°) Configuration minimaliste dans le fichier web.config.

Une des nouveautés de WCF 4.0 repose sur la possibilité de ne plus passer par un fichier "svc" mais de définir un service (la classe concrète) vers une uri. Ceci se fait comme expliqué dans l'exemple ci-dessous en ajoutant une ligne dans les serviceActivations. En faisant ceci, nous obtenons un service WCF totalement fonctionnel. Cependant, autre nouveauté de WCF4, nous avons des "binding" par défaut selon le protocole d'appel. Par exemple, en tentant d'accéder à http://localhost/MyTest.svc, nous allons utiliser le binding basicHttpBinding. Mais quid si nous voulons de la sécurité ou WS-* dans nos services ?

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true">
      <serviceActivations>
        <add relativeAddress="MyTest.svc" service="MyLibrary.MyServer"/>
      </serviceActivations>
    </serviceHostingEnvironment>
  </system.serviceModel>
 </configuration>

4°) Adaptation du binding souhaité pour le service déclaré

Comme expliqué au point 3, si nous sommes en http, par défaut nous allons utiliser le basicHttpBinding. Pour changer cela, il faut redéfinir le service (comme expliqué ci-dessous). En réalisant ceci-ci, nous pouvons ajuster les configurations.

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="MyLibrary.MyServer">
        <endpoint binding="wsHttpBinding" contract="MyLibrary.IMyInterface"/>
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true">
      <serviceActivations>
        <add relativeAddress="MyTest.svc" service="MyLibrary.MyServer"/>
      </serviceActivations>
    </serviceHostingEnvironment>
  </system.serviceModel>
 </configuration>

5°) Conclusion

Je suis disponible en cas de questions. J'espère avoir pu vous aider dans la simplification de vos configurations.