2009-09-03 229 views
0

对于SOAP HTTP请求,我完全陌生。有人能给我一个关于可能会减缓它的事情的广泛破坏。我正在使用SOAP,WSDL的.NET应用程序。该请求每次大约需要50秒。我可能没有任何意义,所以请原谅我的无知。在我的结尾处可以做些什么,以便允许请求在不导致页面不加载的情况下运行。 AJAX也许。SOAP HTTP请求很慢

--M

编辑(09/08/2009):

OK,我用SOAPUI及其未来与两个选项WebServiceSoap12和WebServiceSoap。第一个是goving我迅速毫秒的响应,第二个是给我一个“400错误的请求。为什么我需要的是第二个?

下面是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

有没有一般的理由,它减慢,但有任何数量的具体的。不幸的是,你没有发布任何代码,所以我们看不到你的代码有什么问题。 – 2009-09-05 02:24:23

回答

1

你应该首先尝试以确定延迟的原因,因为可能有很多原因,您的主要兴趣是如果延迟发生在服务器侧或(您的)客户端上

如果延迟是在服务器端的东西(可能是一个复杂的操作来创建一个结果,可能是缓慢的服务器等),那么你可以寻找解决方法来处理你的c lient,如:

  • 创建页面第一,通过AJAX之后从服务拉出数据,如你所说
  • 在定期服务的前期拉动的数据并将其存储在本地缓存从您建造网页
  • 等...

如果延迟在客户端上发生的事情,你应该尝试找到根本原因(如网络配置,超时与反向查找等),并解决它;)


编辑:鉴于贴WSDL,Web服务提供了自己在两个变化,一个是“默认” SOAP和一个用于SOAP 1.2。 400响应表明客户端以非标准符合方式发出请求,但也可能是服务端没有正确设置它在wsdl中提供的协议版本。

至于为什么你需要一个或另一个,答案很简单:两者都提供完全相同的方法,所以你只需要一个。它可能是可能是是延迟是由您的客户端首次试图使用已停用的版本几次,并在一段时间后只切换到另一个 - 但这只是猜测。如果SOAPUI适用于1.2版本,我只是试图告诉客户端使用它,并看看是否能加快速度。

+0

找到了一个可能已经死亡的链接,会导致它吗? madphp 2009-09-08 11:15:59

+0

非常不可能 - 名称空间URI并不需要真正指向任何真实内容,因为它们仅用于唯一标识名称空间,不用于描述它或任何内容。仍然有很多人在描述命名空间的URI地址处放置可读文档,但是没有任何XML解析器/工具应该真的想要查看这些文档,特别是在这样做的时候不要“开怀大笑”。 – 2009-09-08 18:27:09