Http Handlers是否适合选择架构?

时间:2012-05-01 09:42:24

标签: jquery .net web-services architecture

目前,我们的软件包含一个winForms应用程序,它可以调用许多Web服务,并且它们之间有数百种Web方法。

由于许多原因,我们正在转向仅限Web的架构(jQuery Mobile,jQuery,HTML5,LawnChair)。该网页仅处理演示文稿,所有业务逻辑都将出现在服务器端。所以我需要从网页上调用这些Web服务。

我知道必须有很多方法可以做到这一点,例如我一直在为每个Web方法试验jQuery调用服务器端HttpHandlers。由于jQuery使用JSON,我无法直接调用XML SOAP,因此需要在jQuery上添加一个新层来添加。

然而,这是正确的方法吗?是否有另一种更合适的方法,即实施的工作量较少,possibly using WCF或其他我忽略的内容?

2 个答案:

答案 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响应..我认为有插件。