2012-05-01 11 views
2

現在のところ、私たちのソフトウェアは、数百のWebメソッドを持つ多数のWebサービスを呼び出すwinFormsアプリケーションで構成されています。Httpハンドラはアーキテクチャの適切な選択ですか?

多くの理由から、私たちはWebのみのアーキテクチャ(jQuery Mobile、jQuery、HTML5、LawnChair)に移行しています。 Webページはプレゼンテーションのみを処理し、ビジネスロジックはすべてサーバー側で発生します。だから私はこれらのWebサービスをWebページから呼び出す必要があります。

私は、これを行うには多くの方法が必要であることは知っています。例えば、各WebメソッドのjQueryコール側サーバー側HttpHandlersを試しています。 jQueryはJSONを使用しているため、XML SOAPを直接呼び出すことはできません。そのため、jQueryから呼び出せる新しいレイヤーを追加する必要があります。

しかし、これは正しいアプローチですか?もう一つ、より適切なアプローチは、実装するための努力が少ない、possibly using WCF、または私が見落としている他のものはありますか?

+0

サーバーサイドコードまたはクライアントコードについて質問しているかどうかはわかりません。既存のサービスやコードを変更する必要はないはずですから、クライアントリクエストについては私が答えました。新しいブリッジAPIなどを作成しますか? – ppumkin

+0

@ppumkin JSONを使用するjQueryから呼び出されるサーバー側ハンドラ。現在使用しているWebサービスはXML SOAPですが、下位互換性のために変更することはできませんので、途中で何かが必要になります。 –

+0

ああ、まあまあ、私の答えはごみです。ごめんなさい。私はあなたがしていることを思っています..許しがたい唯一の方法です(少なくとも私が知っている) – ppumkin

答えて

0

ない、これはあなたを助けることができるが、我々はajax.asmxのようなWebサービスを使用して、我々はそのような何かが私が思うあなたを助けることができる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 

jQueriesを使用して、それを呼び出す場合を確認してください。

しかし、あなたはそれがより多くのクライアント側のコード

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応答を解析しrequries jsut既存のSOAP XMLサービスを処理するために、独自のクラスを作ることができます..私はそのためのプラグインがあると思います。

+0

既存のサービスを変更する必要はありませんか?インタフェースを変更すると、既存のクライアントアプリケーションが破損します。 –

+1

変更するものを決定するのは難しいです。長期的な解決策として、SOAP代替サービスと同じビジネスロジックを呼び出し、複雑なクライアントサイドのソースコードなしでjQueryを使用し、両方を維持することを避けるために石鹸サービスを段階的に廃止するというJSONフレンドリーなサービス/インターフェイスを作成することをお勧めします。 。 – ppumkin

2

jQueryからXML Webサービスを使用することができます。 XMLメッセージでうまく動作します。しかし、JavaScriptでSOAPメッセージを作成して読むのは面倒です。

適切な内容は、あなたによって異なります。しかし、WCF RESTを使用するか、またはより良いASP.NET MVC4 WebAPIを使用すると、配管を通してアプリケーションをブートストラップし、作業アプリケーションをかなり迅速に配備することに集中できます。しかし、これはあなたの元のサービスの書き換えを必要とします(あなたはとにかく運命づけられているようです)。