2009-09-03 11 views
0

Im totalement nouveau pour les requêtes HTTP SOAP. Quelqu'un peut-il me donner un large aperçu sur les choses qui pourraient le ralentir. Je travaille sur une application .NET qui utilise SOAP, WSDL. La requête prend environ 50 secondes, à chaque fois. Je n'ai probablement aucun sens, alors s'il vous plaît excusez mon ignorance. Pourrait-il y avoir quelque chose que je pourrais faire à mon extrémité, pour permettre à la demande de s'exécuter sans provoquer le chargement de la page. AJAX peut-être.Demande HTTP SOAP très lente

-M

Edit (09/08/2009):

OK, je l'ai utilisé SoapUI et son entrée avec deux options WebServiceSoap12 et WebServiceSoap. Le premier me goving une réponse en millisecondes rapide, et le second me donne un « 400 Bad Request. Pourquoi aurais-je besoin de ce second?

Ci-dessous le WSDL

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.example.com" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://www.example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
    <wsdl:types> 
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.example.com"> 
     <s:element name="EventGetList"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="regionId" type="s:string" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:element name="EventGetListResponse"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="EventGetListResult" type="tns:ArrayOfOpenEvent" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:complexType name="ArrayOfOpenEvent"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="unbounded" name="OpenEvent" nillable="true" type="tns:OpenEvent" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="OpenEvent"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="Id" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Title" type="s:string" /> 
      <s:element minOccurs="1" maxOccurs="1" name="EventStart" type="s:dateTime" /> 
      <s:element minOccurs="1" maxOccurs="1" name="EventEnd" type="s:dateTime" /> 
      <s:element minOccurs="0" maxOccurs="1" name="RegionId" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="EventSubject" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="EventAdditionalDetails" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="EventDelivery" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Location" type="tns:EventLocation" /> 
      <s:element minOccurs="1" maxOccurs="1" name="OnlineRegistrations" type="s:boolean" /> 
     </s:sequence> 
     </s:complexType> 
     <s:complexType name="EventLocation"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Address1" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Address2" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Address3" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Town" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Postcode" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="AddressOther" type="s:string" /> 
     </s:sequence> 
     </s:complexType> 
     <s:element name="EventRegisterClient"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="registration" type="tns:OpenEventRegistration" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
     <s:complexType name="OpenEventRegistration"> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="EventId" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="ForeName" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="Surname" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="TelephoneNumber" type="s:string" /> 
      <s:element minOccurs="0" maxOccurs="1" name="EmailAddress" type="s:string" /> 
     </s:sequence> 
     </s:complexType> 
     <s:element name="EventRegisterClientResponse"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="1" maxOccurs="1" name="EventRegisterClientResult" type="s:boolean" /> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
    </s:schema> 
    </wsdl:types> 
    <wsdl:message name="EventGetListSoapIn"> 
    <wsdl:part name="parameters" element="tns:EventGetList" /> 
    </wsdl:message> 
    <wsdl:message name="EventGetListSoapOut"> 
    <wsdl:part name="parameters" element="tns:EventGetListResponse" /> 
    </wsdl:message> 
    <wsdl:message name="EventRegisterClientSoapIn"> 
    <wsdl:part name="parameters" element="tns:EventRegisterClient" /> 
    </wsdl:message> 
    <wsdl:message name="EventRegisterClientSoapOut"> 
    <wsdl:part name="parameters" element="tns:EventRegisterClientResponse" /> 
    </wsdl:message> 
    <wsdl:portType name="WebServiceSBSpEventsSoap"> 
    <wsdl:operation name="EventGetList"> 
     <wsdl:input message="tns:EventGetListSoapIn" /> 
     <wsdl:output message="tns:EventGetListSoapOut" /> 
    </wsdl:operation> 
    <wsdl:operation name="EventRegisterClient"> 
     <wsdl:input message="tns:EventRegisterClientSoapIn" /> 
     <wsdl:output message="tns:EventRegisterClientSoapOut" /> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="WebServiceSBSpEventsSoap" type="tns:WebServiceSBSpEventsSoap"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="EventGetList"> 
     <soap:operation soapAction="http://www.example.com/EventGetList" style="document" /> 
     <wsdl:input> 
     <soap:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    <wsdl:operation name="EventRegisterClient"> 
     <soap:operation soapAction="http://www.example.com/EventRegisterClient" style="document" /> 
     <wsdl:input> 
     <soap:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:binding name="WebServiceSBSpEventsSoap12" type="tns:WebServiceSBSpEventsSoap"> 
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="EventGetList"> 
     <soap12:operation soapAction="http://www.example.com/EventGetList" style="document" /> 
     <wsdl:input> 
     <soap12:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
     <soap12:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    <wsdl:operation name="EventRegisterClient"> 
     <soap12:operation soapAction="http://www.example.com/EventRegisterClient" style="document" /> 
     <wsdl:input> 
     <soap12:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
     <soap12:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="WebServiceSBSpEvents"> 
    <wsdl:port name="WebServiceSBSpEventsSoap" binding="tns:WebServiceSBSpEventsSoap"> 
     <soap:address location="http://www.example.com/webserviceexternal/WebServiceSBSpEvents.asmx" /> 
    </wsdl:port> 
    <wsdl:port name="WebServiceSBSpEventsSoap12" binding="tns:WebServiceSBSpEventsSoap12"> 
     <soap12:address location="http://www.example.com/webserviceexternal/WebServiceSBSpEvents.asmx" /> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 
+0

Il n'y a pas de raisons générales pour ralentir, mais il y en a un certain nombre de spécifiques. Malheureusement, vous n'avez pas publié de code, donc nous ne pouvons pas voir ce qui ne va pas avec votre code. –

Répondre

1

Vous devriez d'abord essayer pour identifier la cause du retard, car il peut y avoir plusieurs raisons à cela: votre principal intérêt serait que le retard se produise du côté du serveur ou du côté de (votre) client

Si le retard est du côté serveur des choses (peut être une opération compliquée pour créer un résultat, peut être un serveur lent, etc.), alors vous pouvez chercher des solutions de contournement pour faire face à cela dans votre c LIENT, par exemple:

  • la création de la première page et en tirant les données du service après via ajax, comme vous le suggérez
  • tirant les données de l'avance de service à intervalles réguliers et le stocker dans un cache local à partir duquel vous construisez vos pages
  • etc ...

Si le retard se passe du côté client, vous devriez essayer de trouver la cause racine (par exemple la configuration du réseau, les délais d'expiration avec la résolution inverse, etc.) et le fixer;)


Edit: Compte tenu de la posté wsdl, le service Web offre lui-même en deux variantes, l'une pour SOAP 'par défaut' et un pour SOAP 1.2. La réponse 400 indique que le client émet la demande de manière non standard, mais il se peut aussi que la fin du service ne soit pas correctement configurée pour la version du protocole qu'il est censé proposer dans le fichier wsdl. Pour ce qui est de savoir pourquoi vous auriez besoin de l'un ou de l'autre, la réponse est simple: les deux offrent exactement les mêmes méthodes, vous n'avez donc besoin que d'une seule. Il pourrait être que le retard est causé par votre client essayant d'abord d'utiliser la version défunte à quelques reprises et seulement passer à l'autre après un certain temps - mais ce n'est que conjecture. Si SOAPUI fonctionne bien avec la version 1.2, j'essaierais juste de dire au client de l'utiliser et de voir si cela accélère les choses.

+0

trouvé un lien qui peut être mort, serait-ce le causer. madphp

+0

Hautement improbable - Les URI d'espace de noms ne sont pas requis pour vraiment pointer vers un contenu réel, car ils ne sont utilisés que pour identifier de façon unique l'espace de noms, et non pour le décrire ou quoi que ce soit.Encore beaucoup de gens mettent un document lisible à l'adresse URI qui décrit l'espace de noms, mais aucun analyseur/outil XML ne devrait vraiment vouloir regarder ceci, particulièrement pas le temps «wating» en faisant ainsi. –

Questions connexes