salut,

Dans le cadre d'un projet, je dois faire un web service j2e avec un client c# pour le consommer. Apres avoir fait quelques test, je ne pense pas que l'erreur vienne du côté java (pour ca que je poste dans le fofo c# ).

Donc n'étant pas un expert en c# je vais décrire la manip que j'ai faite:
add service reference dans visual studio, la j'ai inséré l'adresse de mon WSDL ce qui m'a ajouté un service dans mon projet VS. Jusqu'ici rien de spécial, j'ai ensuite developpé une class MyWebService (singleton) qui instencie mon web service et appelle ses méthodes. Premier test et premieres erreurs, j'ai du faire quelque modifs dans mon fichier config que voici :

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
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="GestionUserWsPortBinding">
          <textMessageEncoding messageVersion="Soap12"/>
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="http://xxx:8080/GestionUserWsService/GestionUserWs"
          binding="customBinding" bindingConfiguration="GestionUserWsPortBinding"
          contract="GestionUserWs.GestionUserWs" name="GestionUserWsPort" />
    </client>
  </system.serviceModel>
</configuration>
apres les modifs, 2e test et hop la tout marche parfaitement !
Mais non en fait, 2e probleme qui apparait : apres quelques minutes d'utilisation, ou des fois apres quelques heures, l'appel à mon webservice genere une exception, et je n'ai pas la moindre idée d'ou cela peut venir:

stackTrace:

Server stack trace:
à System.ServiceModel.Channels.HttpInput.WebResponseHttpInput.WebResponseInputStream.Read(Byte[] buffer, Int32 offset, Int32 count)
à System.ServiceModel.Channels.MessageEncoder.BufferMessageStream(Stream stream, BufferManager bufferManager, Int32 maxBufferSize)
à System.ServiceModel.Channels.MessageEncoder.ReadMessage(Stream stream, BufferManager bufferManager, Int32 maxBufferSize, String contentType)
à System.ServiceModel.Channels.HttpInput.ReadChunkedBufferedMessage(Stream inputStream)
à System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception& requestException)
à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
à System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
à System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
à System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
à System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
à System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
à System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
à ClientMessenger.GestionUserWs.GestionUserWs.getFriends(getFriendsRequest request)
à ClientMessenger.GestionUserWs.GestionUserWsClient.ClientMessenger.GestionUserWs.GestionUserWs.getFriends(getFriendsRequest request)
à ClientMessenger.MyUser.getFriends()
à ClientMessenger.Messenger.refreshFriendList()

InnerException:

System.IO.IOException: Impossible de lire les données de la connexion de transport : Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.. ---> System.AccessViolationException: Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
à System.Net.UnsafeNclNativeMethods.OSSOCK.recv(IntPtr socketHandle, Byte* pinnedBuffer, Int32 len, SocketFlags socketFlags)
à System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, SocketError& errorCode)
à System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- Fin de la trace de la pile d'exception interne ---
à System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
à System.ServiceModel.Channels.DelegatingStream.Read(Byte[] buffer, Int32 offset, Int32 count)
à System.ServiceModel.Channels.PreReadStream.Read(Byte[] buffer, Int32 offset, Int32 count)
à System.ServiceModel.Channels.HttpInput.WebResponseHttpInput.WebResponseInputStream.Read(Byte[] buffer, Int32 offset, Int32 count)
A noter que j'ai 2 machines, une sous vista 32, une sous vista 64, sous vista 32 l'erreur peut se produire au bout de x minutes comme jamais, sous vista 64 l'erreur se produit directement qd j'appelle une 2e fois une méthode du web service.
Voila si quelqu'un a une idée d'ou cela peut venir, c'est très surement "une erreur à la con" mais elle me saute pas aux yeux :p
++

Edit: Il n'y a pas d'erreur côté serveur.
et J'ai fait quelques tests aussi, l'erreur n'est pas "persistante", en appelant x fois le web service (tant que erreur, refaire) l'erreur n'est plus généré au bout d'1 moment et on est reparti pour x minutes sans erreurs.. le probleme c'est que c'est moche de faire comme ca et que ca genere des gros lags dans l'application :p