2015-11-05 49 views
1

我正在根据雇用我的公司开发的现有Web应用程序创建移动应用程序,他们希望我尽可能多地使用现有的后端应用程序,结束和中间件。我使用Visual Studio社区与科尔多瓦混合应用程序,并没有制作本地应用程序的计划。现在我在调用SOAP Web服务时遇到了严重的问题。Web服务麻烦 - Apache Cordova - Visual Studio 2015 Comunity

限制

  • 的Web应用程序部署在JBOSS,并且不使用servlet,而不是 其与Java客户端

  • 我只可以使用JavaScript调用服务,htlm5和CSS(由于科尔多瓦,但可以实施本地API)

我至今尝试:

  • 直接通过AJAX调用调用它,我的最后一次尝试是这样的:

    VAR productServiceUrl = “http://localhost/searchUserDataWS/SearchUserDataWS?wsdl”;

    function beginSaveProduct() { 
        var soapMessage = 
        '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://searchuserdataws.alist.integra.la/"> \ 
         <soapenv:Header/> \ 
         <soapenv:Body> \ 
          <sear:searchUserBasicData> \ 
          <!--Optional:--> \ 
          <header> \ 
           <!--Optional:--> \ 
           <chanel>?</chanel> \ 
           <!--Optional:--> \ 
           <ip>?</ip> \ 
           <!--Optional:--> \ 
           <user>?</user> \ 
          </header> \ 
          <!--Optional:--> \ 
          <email>[email protected]</email> \ 
          </sear:searchUserBasicData> \ 
         </soapenv:Body> \ 
        </soapenv:Envelope>' 
    
        $.ajax({ 
         url: productServiceUrl, 
         type: "POST", 
         dataType: "xml", 
         data: soapMessage, 
         complete: endSaveProduct, 
         contentType: "text/xml; charset=\"utf-8\"" 
    
        }); 
    

有了这个代码即时得到404错误从服务器和Im 100%,该SOAP消息是正确的(如我上SOAPUI测试和服务答案如预期)

  • 我也尝试过这个插件:https://github.com/doedje/jquery.soap调整了一下后,我设法让它发送正确的请求(我尝试了SOAPUI并得到了正确的响应),但是,当我在Android模拟器中运行它时有500个错误(内部服务器错误)。这个特定的错误意味着我与服务联系,但是XML无法处理(这很奇怪,因为SOAPui上的XML相同)。我怀疑它是一个CORS错误,因为我在本地主机上运行了所有东西。

  • 一位同事尝试使用C#的控制台应用程序,该应用程序从服务中获得正确的答案。我们想过做一个C#库,用于调用服务但我们还不知道如何调用从科尔多瓦

我的问题一个C#方法,所有的方法:应该是什么我的下一步是什么?创建一个调用服务的API,继续尝试C#库或其他不同的东西?

+0

下一步应该搞清楚如何使你的代码上面的工作,因为这是最好的办法。我一直使用它,它应该工作。我看不到您的代码有任何问题。你没有得到Ajax的结果(即'success'和'failure'而不是'complete'),但那是另一回事。尝试改变'contentType'为这个'contentType:“text/xml”,并让我知道。 –

+0

刚刚做了,并且404错误仍然存​​在。任何其他的消化?无论如何感谢 – Silver

回答

0

就像我说的,Ajax调用是您的案例(使用Cordova)的最佳方法。我一直使用它,它应该工作。我看不出您的代码存在任何问题,因此我们先来弄清楚发生了什么问题。要做到这一点,使用标准HTML页面进行测试要容易得多。对于我使用的每个API/Web服务,我都有这样的HTML测试页面。我已经为你创建了一个。将代码复制到计算机上的HTML页面,编辑SOAP消息以包含所需的信息,然后单击[Test Directly]按钮进行测试。一旦它工作,您可以尝试[通过Ajax测试]按钮通过Ajax提交完全相同的消息。让我们知道结果。

function TestAjax(){ 
 
    var productServiceUrl = "http://localhost/searchUserDataWS/SearchUserDataWS?wsdl"; 
 

 
    var soapMessage = document.getElementById("mesage").innerHTML; 
 

 
    $.ajax({ 
 
     url: productServiceUrl, 
 
     type: "POST", 
 
     dataType: "xml", 
 
     data: soapMessage, 
 
     contentType: "text/xml;", 
 
     success: function (result) { document.write(result); }, 
 
     error: function (error) { document.write(error); }, 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<html><header><title>Test My API</title></header> 
 
<body> 
 
<form method="POST" action="http://localhost/searchUserDataWS/SearchUserDataWS?wsdl"> 
 
<textarea id="mesage" style="width: 100%; height: 350px;"><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://searchuserdataws.alist.integra.la/"> 
 
     <soapenv:Header></soapenv:Header> 
 
     <soapenv:Body> 
 
      <sear:searchUserBasicData> 
 
      <!--Optional:--> 
 
      <header> 
 
       <!--Optional:--> 
 
       <chanel>?</chanel> 
 
       <!--Optional:--> 
 
       <ip>?</ip> 
 
       <!--Optional:--> 
 
       <user>?</user> 
 
      </header> 
 
      <!--Optional:--> 
 
      <email>[email protected]</email> 
 
      </sear:searchUserBasicData> 
 
     </soapenv:Body> 
 
    </soapenv:Envelope></textarea> 
 
<br/><br/> 
 
<input type="submit" value="Test Directly" /> 
 
<input type="button" value="Test Via Ajax" onclick="TestAjax();" /> 
 
</form> 
 
</html> 
 
</body>

+0

直接填写请求和测试后,我得到了一个XML文档中的“读取XMLStreamReader时出错”,AJAX也失败了(它返回了[object Object],但是在改写错误部分之后,简单地写上'

错误

'我得到了,所以阿贾克斯失败 我不是很熟悉SOAP,但在谷歌快速后,问题似乎是发送的XML被认为是一个SOAP请求任何消化什么我在做错了请求? – Silver

+0

就像我说过的,在通过Direct按钮解决它之前,尝试使用Ajax按钮是毫无意义的。由于Direct按钮失败,这意味着Ajax不是问题(这是我在开始时告诉你的)。问题出现在您发送的Soap消息中或web服务代码中,如果没有,我们无法提供帮助看到该代码,所以你可以更新你的问题,并在那里添加代码,并提及哪一行抛出异常。 –

+0

我目前无法访问web服务代码。在简短的讨论之后,我们决定尝试使用本机代码来提出请求,因为我们已经在Java和C#中使用SOAP方面的专业知识。随着我们的进展,我会不断更新问题并提供更多信息 感谢您的快速帮助,因为它让我们对下一步该做什么有所了解,并且我会找到答案,我也会发布它。 – Silver

相关问题