2011-05-13 6 views
3

J'essaie de consommer un service Web qui a été créé en utilisant Soap :: Lite (Perl). Je consomme le service en utilisant C#. Pour la plupart, cela fonctionne bien. Je peux saisir les réponses et les analyser comme bon me semble. Cependant, j'ai certains appels qui ne fonctionnent pas.Taille de la réponse SOAP

Je reçois le message suivant: « Une connexion existante a été fermée de force par l'hôte distant »

Je crois comprendre que le serveur est probablement couper la connexion pour une raison quelconque . J'essaie de trouver cette raison. Je pense que cela se passe en raison de la taille des détails de certaines réponses. J'ai en particulier un qui échouera toujours et quand je regarde le XML de la réponse SOAP, il est toujours tronqué exactement au même endroit que s'il atteignait cet endroit et qu'il atteignait une limite de taille .

Alors, je l'ai fait tout ce que je peux penser à la taille du client telles que la modification des paramètres et MaxReceivedMessageSize délai d'attente, etc. Je l'ai remarqué que je peux augmenter les délais d'attente et le temps d'exécution augmente par la suite, mais le la journalisation des diagnostics que je fais s'arrête toujours au même endroit.

J'ai aussi écrit une classe qui me permet d'afficher le XML brut et encore, il s'arrête au même endroit.

Je pense que peut-être quelque chose sur le serveur doit être changé, mais tout ce que j'ai essayé ne fonctionne pas. Le service est hébergé sur un serveur Web exécutant IIS 6.

Quelqu'un at-il des suggestions pour ce que je peux faire du côté client et/ou côté serveur?

Merci

EDIT


Je constate qu'il n'y a pas de fichier WSDL pour moi d'utiliser. L'application avec laquelle je travaille est la seule fois où j'ai déjà travaillé avec SOAP :: Lite et de ce que je peux dire, elle ne génère pas de WSDL.

@ e36M3 - Merci pour la suggestion. Je n'avais jamais entendu parler de soapUI. Je l'ai installé et essayé et je peux voir beaucoup d'utilisations pour cela, donc je vais le garder à l'esprit pour l'avenir. Malheureusement, il semble être construit autour de tests WSDL et je ne peux pas voir comment tester avec lui sans fournir un WSDL qui est un problème étant donné cette situation particulière.


Voici quelques-unes des données pertinentes de mon enregistrement de trace. Il commence par où le XML invalide se termine et se termine avec les informations d'erreur.

System.Net Verbose: 0: [5772] 000031E0;/map>. </données
System.Net Verbose: 0: [5772] 000031E0>. System.Net verbeux: 0: [5772] 000031E0 ESP1: MRWebServic
System.Net verbeux: 0: [5772] 000031E0 es__getIssueDeta
System.Net verbeux: 0: [5772] 000031E0 ilsResponse> System.Net verbeux: 0: [5772] 000031E0 AP-ENV: Corps> System.Net Verbose: 0: [5772] 000031E0 AP-ENV: Enveloppe>
System.Net Explication: 0: [5772] Quitter ConnectStream # 15566556 :: Lu () -> 12880 # 12880 < br /> Système.Net Verbose: 0: [5772] ConnectStream # 15566556 :: Read()
System.Net.Sockets Verbose: 0: [5772] Socket # 20784002 :: Receive()
Erreur System.Net.Sockets: 0: [ 5772] Exception dans le socket # 20784002 :: Receive - Une tentative de connexion a échoué car la partie connectée n'a pas répondu correctement après une période de ou une connexion établie a échoué car l'hôte connecté n'a pas réussi à répondre
System.Net.Sockets Verbose: 0: [5772] Sortant Socket # 20784002 :: Receive() -> 0 # 0
System.Net.Sockets Verbose: 0: [5772] Socket # 20784002 :: Dispose()
Erreur System.Net: 0: [5772] Exception dans le HttpWebRequest # 63722612 :: - La connexion sous-jacente était fermée: Un unexpecte Une erreur est survenue lors de la réception. System.Net verbeux: 0: [5772] ConnectStream # 15566556 :: Close()
System.Net verbeux: 0: [5772] Exiting ConnectStream # 15566556 :: Close()

+0

Assurez-vous que ces appels spécifiques ne se bloquent pas du côté serveur. – Adi

+1

Avez-vous essayé d'exécuter l'appel de soapUI ou similaire? Cela vous aidera à exclure .NET comme étant la raison pour laquelle il échoue. – e36M3

Répondre

1

Dans votre liaison pour le Le service Web dans le fichier app.exe.config doit être un paramètre pour la taille maximale du message reçu. La valeur par défaut est maxReceivedMessageSize = "65536". L'augmentation de la valeur devrait permettre à l'application cliente de recevoir toutes les données.

+0

J'avais déjà essayé cette méthode. J'ai créé une liaison dans mon web.config et ajouté un point de terminaison qui utilise cette liaison. La seule façon de savoir comment les associer à mon client de service est via un contrat de service. D'après ce que je comprends c'est pour un service WCF, donc je ne suis pas sûr si la liaison est en train d'être touchée. Comme je l'ai dit cependant, quand j'augmente le timeout de l'endpoint, le temps d'exécution augmente par la suite. – Minsc

+0

J'ai également ajouté Minsc