目前,我们的软件包含一个winForms应用程序,它可以调用许多Web服务,并且它们之间有数百种Web方法。
由于许多原因,我们正在转向仅限Web的架构(jQuery Mobile,jQuery,HTML5,LawnChair)。该网页仅处理演示文稿,所有业务逻辑都将出现在服务器端。所以我需要从网页上调用这些Web服务。
我知道必须有很多方法可以做到这一点,例如我一直在为每个Web方法试验jQuery调用服务器端HttpHandlers。由于jQuery使用JSON,我无法直接调用XML SOAP,因此需要在jQuery上添加一个新层来添加。
然而,这是正确的方法吗?是否有另一种更合适的方法,即实施的工作量较少,possibly using WCF或其他我忽略的内容?
答案 0 :(得分:2)
您可以从jQuery使用XML Web Services。它可以很好地处理XML消息。但是,在JavaScript中创建和读取SOAP消息很糟糕。
什么是合适的取决于你。但是,使用WCF REST或更好的ASP.NET MVC4 WebAPI将通过管道引导应用程序,让您专注于快速交付工作应用程序。但是,这将需要对您的原始服务进行一些重写(无论如何您似乎都注定了它)。
答案 1 :(得分:0)
不确定这是否可以帮助您,但我们使用像ajax.asmx
这样的网络服务,我们使用jQueries ajax
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports ClsLib
Imports Microsoft.WindowsAzure.StorageClient
Imports Microsoft.WindowsAzure
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class Ajax
<System.Web.Services.WebMethod()> _
Public Function function1(byval first as string, byval second as string) as string
'do something here
Return someJsonAsString
End Function
End Class
我认为这样的事可以帮到你。
但是你可以创建自己的类来处理现有的SOAP XML服务,它需要更多的客户端代码
var productServiceUrl = 'http://localhost:57299/ProductService.asmx?op=SaveProduct'; // Preferably write this out from server side
function beginSaveProduct(productID, productName, manufactureDate)
{
var soapMessage =
'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> \
<soap:Body> \
<SaveProduct xmlns="http://sh.inobido.com/"> \
<productID>' + productID + '</productID> \
<productName>' + productName + '</productName> \
<manufactureDate>' + manufactureDate + '</manufactureDate> \
</SaveProduct> \
</soap:Body> \
</soap:Envelope>';
$.ajax({
url: productServiceUrl,
type: "POST",
dataType: "xml",
data: soapMessage,
complete: endSaveProduct,
contentType: "text/xml; charset=\"utf-8\""
});
return false;
}
function endSaveProduct(xmlHttpRequest, status)
{
$(xmlHttpRequest.responseXML)
.find('SaveProductResult')
.each(function()
{
var name = $(this).find('Name').text();
});
}
在jQuery中解析SOAP响应..我认为有插件。