IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Service web utilisant WS-ReliableMessaging avec Axis2 et Sandesha2


Sujet :

Services Web Java

  1. #1
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut Service web utilisant WS-ReliableMessaging avec Axis2 et Sandesha2
    Bonjour,

    Je souhaite utiliser WS-ReliableMessaging pour l'appel de services web. Pour cela, j'ai ajouté le module Sandesha2 à Axis2. N'ayant pas réussi à utiliser des versions plus récentes, j'utilise Axis2 1.2 et Sandesha2 1.2, mais c'est un autre problème posé ici.

    Le lien Globally Engaged Modules de la page d'administration d'Axis2 m'informe que les modules suivants sont activés :
    addressing-1.2
    sandesha2-1.2
    soapmonitor-1.2
    J'ai tout d'abord suivi le guide utilisateur de Sandesha2. J'ai créé et déployé le service web RMSampleService comme indiqué.

    Toutefois, lorsque je tente d'invoquer une opération (ping ou echoString) de ce service depuis un navigateur, je reçois une erreur 500.

    Malgré cela, j'ai tout de même continué à suivre le tutorial. J'ai donc créé un répertoire de dépôt (C:\Repository) dans lequel j'ai placé les fichiers requis selon la structure indiquée. Ensuite, j'ai créé deux classes UserguidePingClient et UserguideEchoClient pour l'invocation de chacune des deux opérations (ping et echoString) exposées par le service web RMSampleService. J'ai remplacé dans chaque cas l'URL du point de terminaison du service (http://localhost:8080/axis2/services/RMSampleService) et le chemin du répertoire de dépôt (C:\Repository).

    En essayant d'exécuter le client UserguidePingClient j'obtiens l'exception suivante :
    ATTENTION: Sandesha2 sender thread has not received a valid synchronous response.
    java.lang.NullPointerException
    at org.apache.axis2.engine.HTTPLocationBasedDispatcher.findOperation(HTTPLocationBasedDispatcher.java:51)
    at org.apache.axis2.engine.AbstractDispatcher.invoke(AbstractDispatcher.java:100)
    at org.apache.axis2.engine.Phase.invoke(Phase.java:383)
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:203)
    at org.apache.axis2.engine.AxisEngine.receiveFault(AxisEngine.java:354)
    at org.apache.sandesha2.workers.SenderWorker.checkForSyncResponses(SenderWorker.java:653)
    at org.apache.sandesha2.workers.SenderWorker.run(SenderWorker.java:341)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
    at java.lang.Thread.run(Unknown Source)
    Et pour le client UserguideEchoClient j'obtiens par contre l'exception :
    ATTENTION: Attempt number 1 of 10 to reestalish connection listener org.apache.axis2.transport.http.server.DefaultConnectionListener@b988a6 due to failure
    java.net.BindException: Address already in use: JVM_Bind
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at org.apache.axis2.transport.http.server.DefaultConnectionListener.run(DefaultConnectionListener.java:82)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
    at java.lang.Thread.run(Unknown Source)

    ...

    GRAVE: Terminating connection listener org.apache.axis2.transport.http.server.DefaultConnectionListener@b988a6 after 10retries in 0 seconds.
    java.net.BindException: Address already in use: JVM_Bind
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at org.apache.axis2.transport.http.server.DefaultConnectionListener.run(DefaultConnectionListener.java:82)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
    at java.lang.Thread.run(Unknown Source)
    Enfin, si je remplace les méthodes fireAndForget du client UserguidePingClient par des méthodes sendReceive ou si je commente la ligne clientOptions.setUseSeparateListener(true); du client UserguideEchoClient je tombe cette fois-ci dans ces deux cas sur :
    GRAVE: org.apache.axis2.AxisFault: java.util.MissingResourceException: Can't find resource for bundle org.apache.axis2.i18n.ProjectResourceBundle, key spec.FAULT_ACTION_NOT_SUPPORTED_REASON
    Exception in thread "main" org.apache.axis2.AxisFault: java.util.MissingResourceException: Can't find resource for bundle org.apache.axis2.i18n.ProjectResourceBundle, key spec.FAULT_ACTION_NOT_SUPPORTED_REASON
    at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:434)
    at org.apache.axis2.util.CallbackReceiver.receive(CallbackReceiver.java:74)
    at org.apache.axis2.engine.AxisEngine.receiveFault(AxisEngine.java:363)
    at org.apache.sandesha2.workers.SenderWorker.checkForSyncResponses(SenderWorker.java:653)
    at org.apache.sandesha2.workers.SenderWorker.run(SenderWorker.java:341)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
    at java.lang.Thread.run(Unknown Source)
    J'ai ensuite cherché à travailler sur le service web simple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    package service;
     
    public class HelloSandesha2 {
    	public String sayHello(String name) {
    		return "Hello " + name + " !";
    	}
    }
    Celui-ci a été correctement déployé sur le serveur Axis2 et est normalement accessible via un navigateur.

    Pour accéder à ce service, j'ai créé le client suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    package axiomclient;
     
    import java.io.File;
     
    import javax.xml.namespace.QName;
     
    import org.apache.axiom.om.OMAbstractFactory;
    import org.apache.axiom.om.OMElement;
    import org.apache.axiom.om.OMFactory;
    import org.apache.axiom.om.OMNamespace;
    import org.apache.axiom.soap.SOAPBody;
    import org.apache.axis2.AxisFault;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.client.ServiceClient;
    import org.apache.axis2.client.async.AsyncResult;
    import org.apache.axis2.client.async.Callback;
    import org.apache.axis2.context.ConfigurationContext;
    import org.apache.axis2.context.ConfigurationContextFactory;
    import org.apache.sandesha2.client.SandeshaClientConstants;
     
    public class HelloSandesha2AXIOMClient {
    	private static String EPR = "http://localhost:8080/axis2/services/HelloSandesha2";
    	private static String NS = "http://service/xsd";
    	private static String REPOSITORY = "C:" + File.separator + "Repository";
     
    	private static OMElement getSayHelloOMBlock(String name) {
    		OMFactory fac = OMAbstractFactory.getOMFactory();
    		OMNamespace omNs = fac.createOMNamespace(NS, "HelloSandesha2");
    		OMElement method = fac.createOMElement("sayHello", omNs);
    		OMElement value = fac.createOMElement("name", omNs);
     
    		value.addChild(fac.createOMText(value, name));
    		method.addChild(value);
     
    		return method;
    	}
     
    	static class TestCallback extends Callback {
    		String name = null;
     
    		public TestCallback(String name) {
    			this.name = name;
    		}
     
    		public void onComplete(AsyncResult result) {
    			SOAPBody body = result.getResponseEnvelope().getBody();
    			OMElement echoStringResponseElem = body.getFirstChildWithName(new QName(NS, "sayHelloResponse"));                        
    			OMElement echoStringReturnElem = echoStringResponseElem.getFirstChildWithName(new QName(NS, "return"));
     
    			System.out.println(echoStringReturnElem.getText());
    		}
     
    		public void onError(Exception e) {
    			System.out.println("Error reported for test call back");
     
    			e.printStackTrace();
    		}
    	}
     
    	public static void main(String[] args) {
    		try {
    			String axis2_xml = REPOSITORY + File.separator + "client_axis2.xml";
    			ConfigurationContext context = ConfigurationContextFactory.createConfigurationContextFromFileSystem(REPOSITORY, axis2_xml);
     
    			OMElement sayHelloOMBlock1 = getSayHelloOMBlock("n°1");
    			OMElement sayHelloOMBlock2 = getSayHelloOMBlock("n°2");
    			OMElement sayHelloOMBlock3 = getSayHelloOMBlock("n°3");
     
    			Options options = new Options();
    			options.setTo(new EndpointReference(EPR));
    			//options.setUseSeparateListener(true);
     
    			ServiceClient sender = new ServiceClient();//context, null);
    			sender.setOptions(options);
    			//sender.engageModule(new QName("addressing"));
    			//sender.engageModule(new QName("sandesha2"));
     
    			Callback callback1 = new TestCallback("Callback 1");
    			sender.sendReceiveNonBlocking(sayHelloOMBlock1, callback1);
     
    			Callback callback2 = new TestCallback("Callback 2");
    			sender.sendReceiveNonBlocking(sayHelloOMBlock2, callback2);
     
    			options.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
     
    			Callback callback3 = new TestCallback("Callback 3");
    			sender.sendReceiveNonBlocking(sayHelloOMBlock3, callback3);
     
    			while(!callback3.isComplete()) {
    				Thread.sleep(1000);
    			}
    		} catch(AxisFault e) {
    			e.printStackTrace();
    		} catch(InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    Commenté de la sorte, ce client n'utilise pas WS-ReliableMessaging et l'exécution renvoie bien le résultat attendu :
    21 août 2008 14:35:44 org.apache.axis2.deployment.DeploymentEngine prepareRepository
    INFO: No services directory was found under C:\Repository.
    21 août 2008 14:35:44 org.apache.axis2.deployment.ModuleDeployer deploy
    INFO: Deploying module: addressing-1.2
    21 août 2008 14:35:45 org.apache.axis2.deployment.ModuleDeployer deploy
    INFO: Deploying module: sandesha2-1.2
    21 août 2008 14:35:45 org.apache.axis2.deployment.ModuleDeployer deploy
    INFO: Deploying module: soapmonitor-1.2
    Hello n°1 !
    Hello n°2 !
    Hello n°3 !
    Par contre, si je décommente la ligne ServiceClient sender = new ServiceClient(context, null); je retombe sur l'exception précédente :
    GRAVE: org.apache.axis2.AxisFault: java.util.MissingResourceException: Can't find resource for bundle org.apache.axis2.i18n.ProjectResourceBundle, key spec.FAULT_ACTION_NOT_SUPPORTED_REASON
    Exception in thread "main" org.apache.axis2.AxisFault: java.util.MissingResourceException: Can't find resource for bundle org.apache.axis2.i18n.ProjectResourceBundle, key spec.FAULT_ACTION_NOT_SUPPORTED_REASON
    at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:434)
    at org.apache.axis2.util.CallbackReceiver.receive(CallbackReceiver.java:74)
    at org.apache.axis2.engine.AxisEngine.receiveFault(AxisEngine.java:363)
    at org.apache.sandesha2.workers.SenderWorker.checkForSyncResponses(SenderWorker.java:653)
    at org.apache.sandesha2.workers.SenderWorker.run(SenderWorker.java:341)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
    at java.lang.Thread.run(Unknown Source)
    Sans décommenter cette ligne, il est impossible d'activer les modules Addressing et Sandesha2 :
    21 août 2008 14:39:05 org.apache.axis2.deployment.DeploymentEngine prepareRepository
    INFO: No services directory was found under C:\Repository.
    21 août 2008 14:39:05 org.apache.axis2.deployment.ModuleDeployer deploy
    INFO: Deploying module: addressing-1.2
    21 août 2008 14:39:05 org.apache.axis2.deployment.ModuleDeployer deploy
    INFO: Deploying module: sandesha2-1.2
    21 août 2008 14:39:05 org.apache.axis2.deployment.ModuleDeployer deploy
    INFO: Deploying module: soapmonitor-1.2
    org.apache.axis2.AxisFault: Unable to engage module : addressing
    at org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:333)
    at org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:318)
    at axiomclient.HelloSandesha2AXIOMClient.main(HelloSandesha2AXIOMClient.java:76)
    Enfin, décommenter la ligne options.setUseSeparateListener(true); ramène à l'exception java.net.BindException: Address already in use: JVM_Bind du client UserguideEchoClient initial.

    Si certains d'entre vous ont des explications, des conseils ou même des pistes à me fournir pour utiliser WS-ReliableMessaging avec Axis2, je suis preneur...

    Merci à vous.

    PS : Je teste cet autre tutorial pour voir ce que ça donne...

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Bonjour,

    Je m'intéresse à nouveau à la spécification WS-ReliableMessaging.

    Le second tutorial cité à la fin du message précédent m'a permis de réaliser des appels fiables entre un client et un service web développés tous deux avec Axis2 1.2 et Sandesha2 1.2.

    Toutefois, trois problèmes se posent à moi :

    1) Si j'essaie de développer un client avec Axis2 1.4.1 (différences avec l'outil wsdl2java et dans les jars proposées), j'ai tout d'abord obtenu l'exception suivante :
    org.apache.axis2.deployment.DeploymentException: javax/jms/JMSException
    J'ai résolu ce problème en incluant dans le classpath l'un des deux jars suivants :
    - geronimo-spec-jms-1.1-rc4.jar présent dans la distribution 1.2 d'Axis2
    - geronimo-j2ee_1.4_spec-1.0.jar à télécharger

    Toutefois, je suis ensuite tombé sur une autre exception :
    org.apache.axis2.AxisFault: The system is attempting to engage a module that is not available: sandesha2
    J'ai l'impression de retomber sur le problème de compatibilités de versions entre Axis2 et Sandesha2 que j'avais exposé sur un autre sujet (lien au début du premier message).
    Comment utiliser la dernière version d'Axis2 (1.4.1) pour consommer de manière fiable un service web avec la spécification WS-ReliableMessaging ?

    2) J'ai également réalisé un service web avec JAX-WS RI et WSIT pour spécifier l'utilisation de WS-ReliableMessaging.
    L'invocation de ce service avec un client JAX-WS RI fonctionne et de manière fiable.
    J'ai donc ensuite cherché à invoquer ce même service en utilisant un client Axis2 1.2 + Sandesha2 1.2.
    Toutefois, j'obtiens l'exception suivante :
    10 sept. 2008 11:10:30 org.apache.sandesha2.util.FaultManager manageIncomingFault
    GRAVE: org.apache.axis2.AxisFault: The """" cannot be processed at the receiver
    10 sept. 2008 11:10:30 org.apache.sandesha2.workers.SenderWorker checkForSyncResponses
    ATTENTION: Sandesha2 sender thread has not received a valid synchronous response.
    java.util.MissingResourceException: Can't find resource for bundle org.apache.axis2.i18n.ProjectResourceBundle, key actionNotRecognised
    at java.util.ResourceBundle.getObject(Unknown Source)
    at java.util.ResourceBundle.getString(Unknown Source)
    at org.apache.axis2.i18n.MessageBundle.getMessage(MessageBundle.java:191)
    at org.apache.axis2.i18n.MessageBundle.getMessage(MessageBundle.java:80)
    at org.apache.axis2.addressing.i18n.AddressingMessages.getMessage(AddressingMessages.java:61)
    at org.apache.axis2.addressing.AddressingFaultsHelper.getMessageForAxisFault(AddressingFaultsHelper.java:125)
    at org.apache.axis2.handlers.addressing.AddressingInFaultHandler.invoke(AddressingInFaultHandler.java:94)
    at org.apache.axis2.engine.Phase.invoke(Phase.java:383)
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:203)
    at org.apache.axis2.engine.AxisEngine.receiveFault(AxisEngine.java:354)
    at org.apache.sandesha2.workers.SenderWorker.checkForSyncResponses(SenderWorker.java:653)
    at org.apache.sandesha2.workers.SenderWorker.run(SenderWorker.java:341)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
    at java.lang.Thread.run(Unknown Source)
    En utilisant TCPMon, je remarque que la requête de création de séquence de la part du client est correcte, de même que la réponse faite par le service pour renvoyer un identifiant de séquence.
    Par contre, la requête SOAP suivante me paraît contenir un élément wsa:Action erroné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    <?xml version='1.0' encoding='UTF-8'?>
    <soapenv:Envelope xmlns:wsa="http://www.w3.org/2005/08/addressing"
    	xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    	<soapenv:Header>
    		<wsa:To>
    			http://localhost:8080/ServiceWSRM/ServiceWSRMService
    		</wsa:To>
    		<wsa:MessageID>
    			urn:uuid:2C2B5B5C54E14A69AB1221037829593
    		</wsa:MessageID>
    		<wsa:Action>""</wsa:Action>
    		<wsrm:Sequence
    			xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm"
    			soapenv:mustUnderstand="1">
    			<wsrm:Identifier>
    				uuid:5f9d707a-8f89-422f-8db3-2fd8d20ac1bc
    			</wsrm:Identifier>
    			<wsrm:MessageNumber>1</wsrm:MessageNumber>
    			<wsrm:LastMessage />
    		</wsrm:Sequence>
    	</soapenv:Header>
    	<soapenv:Body>
    		<ns1:sayHello xmlns:ns1="http://service/">
    			<name>1 last</name>
    		</ns1:sayHello>
    	</soapenv:Body>
    </soapenv:Envelope>
    Voici le code du client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    package client;
     
    import org.apache.axis2.context.ConfigurationContext;
    import org.apache.axis2.context.ConfigurationContextFactory;
    import org.apache.axis2.transport.http.HTTPConstants;
    import org.apache.axis2.transport.http.HttpTransportProperties.ProxyProperties;
     
    import service.ServiceWSRMServiceStub;
     
    public class Sandesha2WSITClient {
    	public static void main(String[] args) throws Exception {
    		ConfigurationContext cc = ConfigurationContextFactory.createConfigurationContextFromFileSystem("C:/Repository", "C:/Repository/client_axis2.xml");
    		ServiceWSRMServiceStub stub = new ServiceWSRMServiceStub(cc, "http://localhost:8080/ServiceWSRM/ServiceWSRMService");
    		stub._getServiceClient().engageModule("addressing");
    		stub._getServiceClient().engageModule("sandesha2");
     
    		// Utilisation de TCPMon
    		ProxyProperties pp = new ProxyProperties();
    		pp.setProxyName("localhost");
    		pp.setProxyPort(8001);
    		stub._getServiceClient().getOptions().setProperty(HTTPConstants.PROXY, pp);
     
    		stub._getServiceClient().getOptions().setProperty("Sandesha2LastMessage", "true");
    		System.out.println(stub.sayHello("1 last"));
     
    		System.exit(0);
    	}
    }
    Que devrais-je modifier pour réussir à invoquer le service web WSIT avec un client Sandesha2 (comment redéfinir l'élément wsa:Action ?) ?

    3) Inversement, j'ai essayé d'invoquer de manière fiable un service web développé avec Axis2 et Sandesha2 (versions 1.2) avec un client JAX-WS RI + WSIT : le service web est bel et bien invoqué correctement, mais sans utilisation de la spécification WS-ReliableMessaging.
    Pour un service web développé avec JAX-WS RI + WSIT en spécifiant l'utilisation de WS-ReliableMessaging côté serveur, je n'ai rien eu à rajouter côté client pour utiliser une invocation fiable.
    Mais avec un service web Axis2 + Sandesha2, comment forcer l'utilisation de la spécification WS-ReliableMessaging côté client (avec WSIT) ?

  3. #3
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Citation Envoyé par Arnaud_03 Voir le message
    Que devrais-je modifier pour réussir à invoquer le service web WSIT avec un client Sandesha2 (comment redéfinir l'élément wsa:Action ?) ?
    Auto-réponse : Modifier le stub client généré par wsdl2java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _operationClient.getOptions().setAction("http://service/ServiceWSRM/sayHelloRequest");
    Restent les points 1 et 3...

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/10/2013, 15h17
  2. Réponses: 0
    Dernier message: 26/12/2010, 02h38
  3. [Metro] Client d'un service web avec WS-ReliableMessaging
    Par Arnaud_03 dans le forum Services Web
    Réponses: 4
    Dernier message: 11/08/2008, 11h52
  4. Technologie pour service web utilisant une dll C
    Par lolinette dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 09/02/2007, 08h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo