【问题标题】:QuickBooks Webconnector Error - Django Soap Web Service - Actual error received from web service for serverVersion callQuickBooks Web 连接器错误 - Django Soap Web 服务 - 从服务器版本调用的 Web 服务收到的实际错误
【发布时间】:2013-08-08 20:03:37
【问题描述】:

我在 django 中编写了一个 SOAP Web 服务,并安装了以下组件

  1. soaplib-0.8.1 在我的系统中
  2. Quickbooks 专业版
  3. QBWC 版本 2.1.0.30 - Intuit

当我尝试将应用程序(.qwc 文件)添加到 QBWC(Quick Books Web 连接器)时,它正在调用我的 Web 服务。它给了我以下错误

错误: 20130807.09:03:28 UTC:QBWebConnector.WebServiceManager.DoUpdateSelected():updateWS() for application = 'Quick Books Integration' 已开始 20130807.09:03:28 UTC:QBWebConnector.RegistryManager.getUpdateLock():HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock = FALSE 20130807.09:03:28 UTC:QBWebConnector.RegistryManager.setUpdateLock():HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock 已设置为 True 20130807.09:03:28 UTC:QBWebConnector.RegistryManager.setUpdateLock():********** 更新会话被锁定********** 20130807.09:03:28 UTC :QBWebConnector.SOAPWebService.instantiateWebService() :已启动到以下应用程序的连接。 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.instantiateWebService():AppName:Cognam Technologies Pvt Ltd Quick Books Integration 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.instantiateWebService():AppUniqueName(如果可用):快速书籍集成 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.instantiateWebService():AppURL:http://test:8000/qwc/qwcintegration/service.wsdl 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_serverVersion():* 调用 serverVersion()。 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_serverVersion():从 web 服务接收到 serverVersion 调用的实际错误:。为了向后兼容所有网络服务器,QBWC 将捕获 app-not-supporting-serverVersion 下的所有错误。 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_serverVersion():此应用程序不包含对 serverVersion 的支持。允许更新操作以实现向后兼容性。 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_clientVersion():* 使用以下参数调用 clientVersion(): 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.updateWS():从 web 服务收到的 clientVersion 调用的实际错误:。为了向后兼容所有网络服务器,QBWC 将捕获 app-not-supporting-clientVersion 下的所有错误。 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_clientVersion():此应用程序不包含对 clientVersion 的支持。允许更新操作以实现向后兼容性。 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_authenticate():对应用程序“快速书籍集成”进行身份验证,用户名 = 'anil' 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_authenticate():* 使用以下参数调用 authenticate(): 20130807.09:03:28 UTC:QBWebConnector.SOAPWebService.do_authenticate():QBWC1012:由于以下错误消息,身份验证失败。 底层连接已关闭:接收时发生意外错误。 更多信息: StackTrace = 在 System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest 请求) 在 System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest 请求) 在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串方法名,对象 [] 参数) 在 QBWebConnector.localhost.WCWebServiceDoc.authenticate(字符串 strUserName,字符串 strPassword) 在 QBWebConnector.localhost.WCWebService.authenticate(字符串 strUserName,字符串 strPassword) 在 QBWebConnector.SOAPWebService.authenticate(字符串用户名,字符串密码) 在 QBWebConnector.WebService.do_authenticate(字符串和票证,字符串和公司文件名) 来源 = System.Web.Services 20130807.09:03:28 UTC:QBWebConnector.RegistryManager.setUpdateLock():HKEY_CURRENT_USER\Software\Intuit\QBWebConnector\UpdateLock 已设置为 False 20130807.09:03:28 UTC:QBWebConnector.RegistryManager.setUpdateLock():*********** 更新会话解锁*********** 20130807.09:03:28 UTC:QBWebConnector.WebServiceManager.DoUpdateSelected():更新完成但出现错误。详情见日志(QWClog.txt)。

Webservice 的 url 包含 localhost 而不是 test。发布问题时,它不允许我提供与 localhost 的链接,我将其更改为 test。 qwc 文件中的实际链接包含 localhost 而不是测试。

请帮帮我。 我猜 QBWC 使用的和我安装的 SOAP 版本不兼容

我真的不知道我哪里出错了。请帮我解决这个问题。 提前致谢

代码如下: views.py

从soaplib_handler 导入数组、字符串、整数 从soaplib进口肥皂 从soaplib.service 导入soapmethod 从soaplib_handler 导入DjangoSoapApp、soapmethod、soap_types

类 QuickBooksService(DjangoSoapApp):

__tns__ = 'http://developer.intuit.com/'

@soapmethod(soap_types.String, _returns=soap_types.String)
def serverVersion(self, ticket):
    print 'serverVersion()'
    print ticket
    return '2.1'

@soapmethod(soap_types.String,
            soap_types.String,
            _returns=Array(String),
            _outMessage='{http://developer.intuit.com/}authenticateResponse',
            _outVariableName='authenticateResult',
            )
def authenticate(self, strUserName, strPassword):
    print 'authenticate()'
    results = []
    results.append('{85B41BEE-5CD9-427a-A61B-83964F1EB426}')
    results.append('')
    results.append('')

    print strUserName
    print strPassword
    print results
    return results

@soapmethod(soap_types.String, _returns=soap_types.String)
def clientVersion(self, strVersion):
    print 'clientVersion()'
    print strVersion
    return ""

@soapmethod(soap_types.String, _returns=soap_types.String)
def closeConnection(self, ticket):
    print 'closeConnection()'
    print ticket
    return 'closeConnection() called on WS'

@soapmethod(soap_types.String,
            soap_types.String,
            soap_types.String,
            _returns=soap_types.String)
def connectionError(self, ticket, hresult, message):
    print 'connectionError'
    print ticket
    print hresult
    print message
    return 'done'

@soapmethod(soap_types.String, _returns=soap_types.String)
def getLastError(self, ticket):
    print 'lastError()'
    print ticket
    return 'Problems foo bar'

@soapmethod(soap_types.String,
            soap_types.String,
            soap_types.String,
            soap_types.String,
            _returns=Integer,
            _outMessage='{http://developer.intuit.com/}receiveResponseXMLResponse',
            _outVariableName='receiveResponseXMLResult',)
def receiveResponseXML(self, ticket, response, hresult, message):
    print 'receiveResponseXML()'
    print "ticket=" + ticket
    print "response=" + response
    if hresult:
        print "hresult=" + hresult
        print "message=" + message
    return 100

@soapmethod(soap_types.String,
            soap_types.String,
            soap_types.String,
            soap_types.String,
            soap_types.Integer,
            soap_types.Integer,
            _returns=String,
            _outMessage='{http://developer.intuit.com/}sendRequestXMLResponse',
            _outVariableName='sendRequestXMLResult',)
def sendRequestXML(self, ticket, strHCPResponse, strCompanyFileName, qbXMLCountry, qbXMLMajorVers, qbXMLMinorVers ):
    print 'sendRequestXML()'
    print strHCPResponse
    xml =   "<?xml version=\"1.0\" ?>" + \
            "<?qbxml version=\"2.0\"?>" + \
                "<QBXML>" + \
                    "<QBXMLMsgsRq onError=\"stopOnError\">" + \
                    "<ItemQueryRq></ItemQueryRq>" + \
                "</QBXMLMsgsRq>" + \
            "</QBXML>"
    return xml


@soapmethod(soap_types.String,
            soap_types.String,
            _returns=soap_types.String)
def interactiveUrl(self, ticket, sessionID):
    print 'interactiveUrl'
    print ticket
    print sessionID
    return 'http://localhost/test'


@soapmethod(soap_types.String, _returns=soap_types.String)
def interactiveDone(self, ticket):
    print 'interactiveDone()'
    print ticket
    return 'Done'

@soapmethod(soap_types.String,
            soap_types.String,
            _returns=soap_types.String)
def interactiveRejected(self, ticket, reason):
    print 'interactiveRejected()'
    print ticket
    print reason
    return 'Message to show'

quickbooks_service = QuickBooksService()

Soaplib_handler.py

从 django.http 导入 HttpResponse 从soaplib.serializers 导入原语作为soap_types 从soaplib.serializers.primitive 导入_element_to_unicode,Null,_element_to_integer 从soaplib.service 导入soapmethod 从soaplib.wsgi_soap 导入SimpleWSGISoapApp

类 DjangoSoapApp(SimpleWSGISoapApp):

def __call__(self, request):
    print "inside call method"
    django_response = HttpResponse()
    def start_response(status, headers):
        print "initial"
        print status
        print headers
        status, reason = status.split(' ', 1)
        # try:
        #     status, reason = status.split(' ', 1)
        # except:
        #     status = status.split(' ')
        #     reason = ''

        print "status"
        print status
        # s1 = status[0]
        django_response.status_code = int(status)
        for header, value in headers:
            django_response[header] = value

    print "Over"

    response = super(DjangoSoapApp, self).__call__(request.META, start_response)
    django_response.content = "\n".join(response)

    return django_response

urls.py

urlpatterns = patterns('',

url(r'^hello_world/', views.quickbooks_service, name='service'),
url(r'^hello_world/service.wsdl', views.quickbooks_service, name='service2'),

)

点击浏览器时的肥皂响应: ----------------------------------------->

<definitions xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:tns="http://developer.intuit.com/" xmlns:typens="http://developer.intuit.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://developer.intuit.com/" name="QuickBooksService">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://developer.intuit.com/">
<xs:element name="interactiveUrlResponse" type="tns:interactiveUrlResponse"/>
<xs:complexType name="connectionError">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
<xs:element name="hresult" type="xs:string"/>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getLastErrorResponse">
<xs:sequence>
<xs:element name="getLastErrorResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="interactiveRejected">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
<xs:element name="reason" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="clientVersion" type="tns:clientVersion"/>
<xs:element name="receiveResponseXML" type="tns:receiveResponseXML"/>
<xs:complexType name="interactiveRejectedResponse">
<xs:sequence>
<xs:element name="interactiveRejectedResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="interactiveRejectedResponse" type="tns:interactiveRejectedResponse"/>
<xs:complexType name="connectionErrorResponse">
<xs:sequence>
<xs:element name="connectionErrorResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="getLastErrorResponse" type="tns:getLastErrorResponse"/>
<xs:element name="interactiveRejected" type="tns:interactiveRejected"/>
<xs:complexType name="getLastError">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="authenticate">
<xs:sequence>
<xs:element name="strUserName" type="xs:string"/>
<xs:element name="strPassword" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="clientVersion">
<xs:sequence>
<xs:element name="strVersion" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="interactiveUrl" type="tns:interactiveUrl"/>
<xs:complexType name="interactiveUrlResponse">
<xs:sequence>
<xs:element name="interactiveUrlResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="connectionError" type="tns:connectionError"/>
<xs:element name="getLastError" type="tns:getLastError"/>
<xs:element name="{http://developer.intuit.com/}sendRequestXMLResponse" type="tns:{http://developer.intuit.com/}sendRequestXMLResponse"/>
<xs:element name="{http://developer.intuit.com/}authenticateResponse" type="tns:{http://developer.intuit.com/}authenticateResponse"/>
<xs:complexType name="interactiveDone">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="serverVersion">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="connectionErrorResponse" type="tns:connectionErrorResponse"/>
<xs:element name="sendRequestXML" type="tns:sendRequestXML"/>
<xs:element name="authenticate" type="tns:authenticate"/>
<xs:element name="closeConnectionResponse" type="tns:closeConnectionResponse"/>
<xs:element name="interactiveDone" type="tns:interactiveDone"/>
<xs:element name="serverVersionResponse" type="tns:serverVersionResponse"/>
<xs:element name="{http://developer.intuit.com/}receiveResponseXMLResponse" type="tns:{http://developer.intuit.com/}receiveResponseXMLResponse"/>
<xs:element name="serverVersion" type="tns:serverVersion"/>
<xs:complexType name="interactiveUrl">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
<xs:element name="sessionID" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="stringArray">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" type="tns:string" name="string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="interactiveDoneResponse">
<xs:sequence>
<xs:element name="interactiveDoneResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="receiveResponseXML">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
<xs:element name="response" type="xs:string"/>
<xs:element name="hresult" type="xs:string"/>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sendRequestXML">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
<xs:element name="strHCPResponse" type="xs:string"/>
<xs:element name="strCompanyFileName" type="xs:string"/>
<xs:element name="qbXMLCountry" type="xs:string"/>
<xs:element name="qbXMLMajorVers" type="xs:int"/>
<xs:element name="qbXMLMinorVers" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="closeConnectionResponse">
<xs:sequence>
<xs:element name="closeConnectionResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="{http://developer.intuit.com/}receiveResponseXMLResponse">
<xs:sequence>
<xs:element name="receiveResponseXMLResult" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="{http://developer.intuit.com/}sendRequestXMLResponse">
<xs:sequence>
<xs:element name="sendRequestXMLResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="serverVersionResponse">
<xs:sequence>
<xs:element name="serverVersionResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="interactiveDoneResponse" type="tns:interactiveDoneResponse"/>
<xs:element name="closeConnection" type="tns:closeConnection"/>
<xs:complexType name="closeConnection">
<xs:sequence>
<xs:element name="ticket" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="stringArray" type="tns:stringArray"/>
<xs:element name="clientVersionResponse" type="tns:clientVersionResponse"/>
<xs:complexType name="clientVersionResponse">
<xs:sequence>
<xs:element name="clientVersionResult" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="{http://developer.intuit.com/}authenticateResponse">
<xs:sequence>
<xs:element name="authenticateResult" type="tns:stringArray"/>
</xs:sequence>
</xs:complexType>
</schema>
</types>
<message name="authenticate">
<part name="authenticate" element="tns:authenticate"/>
</message>
<message name="{http://developer.intuit.com/}authenticateResponse">
<part name="{http://developer.intuit.com/}authenticateResponse" element="tns:{http://developer.intuit.com/}authenticateResponse"/>
</message>
<message name="clientVersion">
<part name="clientVersion" element="tns:clientVersion"/>
</message>
<message name="clientVersionResponse">
<part name="clientVersionResponse" element="tns:clientVersionResponse"/>
</message>
<message name="closeConnection">
<part name="closeConnection" element="tns:closeConnection"/>
</message>
<message name="closeConnectionResponse">
<part name="closeConnectionResponse" element="tns:closeConnectionResponse"/>
</message>
<message name="connectionError">
<part name="connectionError" element="tns:connectionError"/>
</message>
<message name="connectionErrorResponse">
<part name="connectionErrorResponse" element="tns:connectionErrorResponse"/>
</message>
<message name="getLastError">
<part name="getLastError" element="tns:getLastError"/>
</message>
<message name="getLastErrorResponse">
<part name="getLastErrorResponse" element="tns:getLastErrorResponse"/>
</message>
<message name="interactiveDone">
<part name="interactiveDone" element="tns:interactiveDone"/>
</message>
<message name="interactiveDoneResponse">
<part name="interactiveDoneResponse" element="tns:interactiveDoneResponse"/>
</message>
<message name="interactiveRejected">
<part name="interactiveRejected" element="tns:interactiveRejected"/>
</message>
<message name="interactiveRejectedResponse">
<part name="interactiveRejectedResponse" element="tns:interactiveRejectedResponse"/>
</message>
<message name="interactiveUrl">
<part name="interactiveUrl" element="tns:interactiveUrl"/>
</message>
<message name="interactiveUrlResponse">
<part name="interactiveUrlResponse" element="tns:interactiveUrlResponse"/>
</message>
<message name="receiveResponseXML">
<part name="receiveResponseXML" element="tns:receiveResponseXML"/>
</message>
<message name="{http://developer.intuit.com/}receiveResponseXMLResponse">
<part name="{http://developer.intuit.com/}receiveResponseXMLResponse" element="tns:{http://developer.intuit.com/}receiveResponseXMLResponse"/>
</message>
<message name="sendRequestXML">
<part name="sendRequestXML" element="tns:sendRequestXML"/>
</message>
<message name="{http://developer.intuit.com/}sendRequestXMLResponse">
<part name="{http://developer.intuit.com/}sendRequestXMLResponse" element="tns:{http://developer.intuit.com/}sendRequestXMLResponse"/>
</message>
<message name="serverVersion">
<part name="serverVersion" element="tns:serverVersion"/>
</message>
<message name="serverVersionResponse">
<part name="serverVersionResponse" element="tns:serverVersionResponse"/>
</message>
<portType name="QuickBooksService">
<operation name="authenticate" parameterOrder="authenticate">
<documentation/>
<input name="authenticate" message="tns:authenticate"/>
<output name="{http://developer.intuit.com/}authenticateResponse" message="tns:{http://developer.intuit.com/}authenticateResponse"/>
</operation>
<operation name="clientVersion" parameterOrder="clientVersion">
<documentation/>
<input name="clientVersion" message="tns:clientVersion"/>
<output name="clientVersionResponse" message="tns:clientVersionResponse"/>
</operation>
<operation name="closeConnection" parameterOrder="closeConnection">
<documentation/>
<input name="closeConnection" message="tns:closeConnection"/>
<output name="closeConnectionResponse" message="tns:closeConnectionResponse"/>
</operation>
<operation name="connectionError" parameterOrder="connectionError">
<documentation/>
<input name="connectionError" message="tns:connectionError"/>
<output name="connectionErrorResponse" message="tns:connectionErrorResponse"/>
</operation>
<operation name="getLastError" parameterOrder="getLastError">
<documentation/>
<input name="getLastError" message="tns:getLastError"/>
<output name="getLastErrorResponse" message="tns:getLastErrorResponse"/>
</operation>
<operation name="interactiveDone" parameterOrder="interactiveDone">
<documentation/>
<input name="interactiveDone" message="tns:interactiveDone"/>
<output name="interactiveDoneResponse" message="tns:interactiveDoneResponse"/>
</operation>
<operation name="interactiveRejected" parameterOrder="interactiveRejected">
<documentation/>
<input name="interactiveRejected" message="tns:interactiveRejected"/>
<output name="interactiveRejectedResponse" message="tns:interactiveRejectedResponse"/>
</operation>
<operation name="interactiveUrl" parameterOrder="interactiveUrl">
<documentation/>
<input name="interactiveUrl" message="tns:interactiveUrl"/>
<output name="interactiveUrlResponse" message="tns:interactiveUrlResponse"/>
</operation>
<operation name="receiveResponseXML" parameterOrder="receiveResponseXML">
<documentation/>
<input name="receiveResponseXML" message="tns:receiveResponseXML"/>
<output name="{http://developer.intuit.com/}receiveResponseXMLResponse" message="tns:{http://developer.intuit.com/}receiveResponseXMLResponse"/>
</operation>
<operation name="sendRequestXML" parameterOrder="sendRequestXML">
<documentation/>
<input name="sendRequestXML" message="tns:sendRequestXML"/>
<output name="{http://developer.intuit.com/}sendRequestXMLResponse" message="tns:{http://developer.intuit.com/}sendRequestXMLResponse"/>
</operation>
<operation name="serverVersion" parameterOrder="serverVersion">
<documentation/>
<input name="serverVersion" message="tns:serverVersion"/>
<output name="serverVersionResponse" message="tns:serverVersionResponse"/>
</operation>
</portType>
<plnk:partnerLinkType name="QuickBooksService">
<plnk:role name="QuickBooksService">
<plnk:portType name="tns:QuickBooksService"/>
</plnk:role>
</plnk:partnerLinkType>
<binding name="QuickBooksService" type="tns:QuickBooksService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="authenticate">
<soap:operation soapAction="authenticate" style="document"/>
<input name="authenticate">
<soap:body use="literal"/>
</input>
<output name="{http://developer.intuit.com/}authenticateResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="clientVersion">
<soap:operation soapAction="clientVersion" style="document"/>
<input name="clientVersion">
<soap:body use="literal"/>
</input>
<output name="clientVersionResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="closeConnection">
<soap:operation soapAction="closeConnection" style="document"/>
<input name="closeConnection">
<soap:body use="literal"/>
</input>
<output name="closeConnectionResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="connectionError">
<soap:operation soapAction="connectionError" style="document"/>
<input name="connectionError">
<soap:body use="literal"/>
</input>
<output name="connectionErrorResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="getLastError">
<soap:operation soapAction="getLastError" style="document"/>
<input name="getLastError">
<soap:body use="literal"/>
</input>
<output name="getLastErrorResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="interactiveDone">
<soap:operation soapAction="interactiveDone" style="document"/>
<input name="interactiveDone">
<soap:body use="literal"/>
</input>
<output name="interactiveDoneResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="interactiveRejected">
<soap:operation soapAction="interactiveRejected" style="document"/>
<input name="interactiveRejected">
<soap:body use="literal"/>
</input>
<output name="interactiveRejectedResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="interactiveUrl">
<soap:operation soapAction="interactiveUrl" style="document"/>
<input name="interactiveUrl">
<soap:body use="literal"/>
</input>
<output name="interactiveUrlResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="receiveResponseXML">
<soap:operation soapAction="receiveResponseXML" style="document"/>
<input name="receiveResponseXML">
<soap:body use="literal"/>
</input>
<output name="{http://developer.intuit.com/}receiveResponseXMLResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="sendRequestXML">
<soap:operation soapAction="sendRequestXML" style="document"/>
<input name="sendRequestXML">
<soap:body use="literal"/>
</input>
<output name="{http://developer.intuit.com/}sendRequestXMLResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="serverVersion">
<soap:operation soapAction="serverVersion" style="document"/>
<input name="serverVersion">
<soap:body use="literal"/>
</input>
<output name="serverVersionResponse">
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="QuickBooksService">
<port name="QuickBooksService" binding="tns:QuickBooksService">
<soap:address location="http://localhost:8000/qwc/hello_world/service"/>
</port>
</service>
</definitions>

【问题讨论】:

  • 阅读该异常让我想起了我多么想念使用 SOAP。
  • 您能发布您的代码和/或原始 SOAP 响应吗?
  • @consolibyte - 我无法发布代码。它非常大,我只能在这里发布 600 个字符。怎么发?
  • @dan-klasson - 如果你能帮我解决这个问题,那就太好了。
  • @consolibyte - 我编辑了我的帖子并附上了代码和肥皂响应。请看一下,让我知道我哪里出错了

标签: django quickbooks soaplib qbwc


【解决方案1】:

您的网络服务器似乎正在关闭连接,但实际上不应该这样做:

底层连接已关闭:发生意外错误 一个接收。

您确定您的 SOAP 服务确实有效,并且您的 Web 服务器没有崩溃、抛出错误或无缘无故关闭连接吗?

我想知道的另一件事 - 你有指向你的 WSDL 的 Web 连接器。它不应该被指出为实际的 Web 服务,而不是 WSDL 定义吗?

AppURL: http://test:8000/qwc/qwcintegration/service.wsdl

【讨论】:

  • 感谢您的回复。我是这个 SOAP Web 服务的新手。当我在浏览器中复制并粘贴 App url 时,我可以看到正确生成的 SOAP xml。我应该在 App URL 中提供什么?...请指导我
  • 您在上面粘贴的不是 SOAP 输出。它是 WSDL(SOAP 定义/声明,而不是实际的 SOAP 响应)。如果我是你,我会首先找到一个 SOAP 客户端实用程序或编写一个小测试实用程序,看看如果你使用 SOAP 请求访问 SOAP 服务,你实际上会得到什么。
  • Okie 非常感谢您的回复。我需要实现一个soap示例服务并且需要首先解决这个问题。非常感谢您的建议
  • 你应该实现(或下载)一个 SOAP 客户端,然后点击 authenticate 方法,看看你得到了什么。如果您了解 PHP,我们的 PHP DevKit (consolibyte.com/downloads/quickbooks-php-devkit) 中有一个示例,您可以使用它来测试:dev/dev_qbwc_tester.php
  • 嗯....我不会 php 编程。但非常感谢您的帮助。我将尝试寻找 SOAP 客户端,看看它是否有效。如果我卡住了,我可能会问一些疑问,请帮助我......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 2017-06-08
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多