Silverlight 2 et WCF: revue de quelques limitations et solutions possibles

Bonjour,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 Ces derniers temps, j'ai vu plusieurs fois la question se poser : dans quelle mesure Silverlight 2 supporte-t-il WCF? Tout d'abord, un rappel s'impose. Silverlight 2 est un "sous ensemble" du .NET Framework 3.5 et est plus de 10 fois inférieure en taille à celui-ci. Il est donc logique que vous ne retrouviez pas le même niveau de fonctionnalités entre WPF et Silverlight 2 par exemple et entre la couche WCF du client lourd et celle de Silverlight.

 Au sujet des limitations, commençons par lire la documentation MSDN : https://msdn.microsoft.com/en-us/library/cc197940(VS.95).aspx : "Such a service is restricted to using certain protocols to exchange messages and not using certain others. SOAP 1.1 must be used and the Web Service (WS-*) protocols such as WS-Addressing cannot be used. These requirements are satisfied if the WCF service is configured with the BasicHttpBinding."

C’est déjà relativement clair au niveau du type de binding supporté. Silverlight 2 ne pourra pas se connecter via un « named pipe » (ça, on pouvait s’en douter !) ni TCP. Heureusement, il reste d’autres manières de se connecter à un service distant. Pour cela, je vous invite à lire cet excellent article sur le sujet : https://silverlighthack.com/post/2008/07/20/Silverlight-20-Concepts-To-Become-A-Silverlight-Master-(Series-Part-2-WCF).aspx

1ère conclusion intermédiaire : gardez en tête lors de la conception de l’architecture de votre service WCF que Silverlight 2 ne pourra pas accéder à l’ensemble des endpoints prévus pour d’éventuels clients lourds Windows. Tout cela est résumé à travers le diagramme suivant de l’article précédent :

Autre limitation importante précisée dans la documentation : SOAP 1.1 est l’unique version supportée actuellement.

C’est grave docteur ? Heureusement pas tellement. Mais mieux vaut le savoir avant. J

Etudions cela à travers un exemple : vous voulez créer un joli contrôle en Silverlight 2 pour exposer les données de CRM 4.0. Votre 1ère idée sera donc de tout simplement référencer le WebService de CRM 4.0 depuis votre solution Silverlight pour discuter avec le serveur. Et bah, c’est une mauvaise pioche. Les WebServices de CRM 4.0 ne supportent que SOAP 1.2 et ne peuvent donc pas être directement utilisés depuis Silverlight.

Des idées de solutions :

1 – Ecrire un service WCF intermédiaire
2 – Appeler le WebService SOAP 1.2 depuis JavaScript. Pour cela, ce projet pourrait vous être utile : https://www.codeproject.com/KB/XML/JavaScriptProxy_01.aspx . Pour CRM, cet outil est super : https://www.stunnware.com/crm2/topic.aspx?id=JSWebService

Voici davantage de ressources pour vous aider sur ce sujet:

- “Add or remove SOAP 1.2 for ASMX services“ : https://blogs.msdn.com/kaevans/archive/2005/11/10/491640.aspx
- “SOAP 1.2 in .NET Framework 2.0” : https://secure.codeproject.com/KB/XML/soap12inNet20.aspx
- “Silverlight 2 Beta 2: ConfigUnrecognizedElement issue and Fix” : https://petesbloggerama.blogspot.com/2008/08/silverlight-2-beta-2.html

2ème conclusion intermédiaire : faites attention au support limité à SOAP 1.1 de Silverlight 2.

Conclusion finale : aussi innovant soit-il, Silverlight 2 ne peut logiquement pas supporter tout ce que nous avons à disposition sur le client lourd. Il faudra donc toujours avoir cela en tête et bien réfléchir à ce que l’on souhaite faire avant de se lancer bille en tête. En revanche, la plateforme Silverlight 2 vous permettra de capitaliser votre expertise et vos talents de développeurs autour de WPF, XAML & Blend. Un développeur WPF ne sera donc pas perdu sous Silverlight et sa courbe d’apprentissage sera extrêmement rapide.

David