Dans une application WPF, lorsque vous créez une référence de service, vous indiquez l'url à laquelle ce service est disponible (au format "http://<IP_ou_nom_serveur>[:<N°_Port>]/<chemin>/<nom_page_service_.asmx").
Lorsque vous créez cette référence, Visual Studio 2008 ajoute ceci dans le fichier app.config :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Tmon_service_WSSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/rep1/mon_service.asmx" binding="basicHttpBinding"
bindingConfiguration="Tmon_service_WSSoap" contract="ServicesPersos.Tmon_service_WSSoap"
name="RefWebLocal" />
</client>
</system.serviceModel> |
où ServicesPersos est le nom du namespace (le nom donné à la référence aussi) et Tmon_service_WSSOAP, le nom de la classe générée.
On peut voir que deux éléments apparaissent : le binding et le endpoint (point de terminaison).
Ce qui nous intéresse, c'est de pouvoir changer dynamiquement de point de terminaison.
Pour cela, ajoutez des noeuds endpoint avec une nouvelle adresse et un nouveau nom comme suit :
1 2 3 4 5 6 7 8 9
|
<client>
<endpoint address="http://localhost/rep1/mon_service.asmx" binding="basicHttpBinding"
bindingConfiguration="Tmon_service_WSSoap" contract="ServicesPersos.Tmon_service_WSSoap"
name="RefWebLocal" />
<endpoint address="http://www.developpez.com/adaneels/mon_service.asmx" binding="basicHttpBinding"
bindingConfiguration="Tmon_service_WSSoap" contract="ServicesPersos.Tmon_service_WSSoap"
name="RefDeveloppez" />
</client> |
Pour utiliser l'un ou l'autre point de terminaison, passez le nom du point de terminaison souhaité en paramètre du constructeur de votre service :
1 2 3 4
| using (ServicesPersos.Tmon_service_WSSoap MyWS = new ServicesPersos.Tmon_service_WSSoapClient("RefWebLocal"))
{
// traitement
} |
Vous pouvez ainsi charger le service web à partir du serveur souhaité lorsque vous avez plusieurs serveurs disponibles.
D'autres méthodologies sont disponibles en utilisant d'autres contructeurs (voir "liens utiles").
lien utile : MSDN : constructeurs ClientBase (classe dont hérite la classe Tmon_service_WSSOAP) :
http://msdn.microsoft.com/en-us/library/ms585869.aspx
Partager