2009-05-19 15 views
7

क्या एएसपी.Net सर्वर एप्लिकेशन के साथ जीडब्ल्यूटी (Google वेब टूलकिट) का उपयोग करने के लिए कोई अच्छा उपकरण उपलब्ध है? जीडब्ल्यूटी के लिए प्रोग्रामिंग मॉडल और टूल्स काफी अच्छे हैं, हालांकि, बैकएंड सी #/एएसपी.Net में रह सकता है तो यह अच्छा होगा।क्या एएसपी.NET के साथ जीडब्ल्यूटी को एकीकृत करने के लिए कोई अच्छा उपकरण है?

क्या वर्तमान में इसके लिए एक अच्छा समाधान उपलब्ध है?

उत्तर

7

GWT FAQ के अनुसार, आपको यह करने में सक्षम होना चाहिए।

AJAX का दिल ब्राउज़र में चल रहे जावास्क्रिप्ट एप्लिकेशन से सर्वर को डेटा पढ़ने/लिखने के लिए कॉल कर रहा है। जीडब्ल्यूटी "आरपीसी अज्ञेयवादी" है और आरपीसी अनुरोध जारी करने के लिए प्रोटोकॉल का उपयोग करने के लिए प्रोटोकॉल का उपयोग करने के बारे में कोई विशेष आवश्यकता नहीं है, या यहां तक ​​कि सर्वर कोड किस भाषा में लिखा गया है। हालांकि जीडब्ल्यूटी कक्षाओं की एक पुस्तकालय प्रदान करता है जो आरपीसी संचार को जे 2 ईई सर्वर के साथ बेहद आसान बनाता है , आपको उनका उपयोग करने की आवश्यकता नहीं है। इसके बजाय आप पुनर्प्राप्त करने के लिए कस्टम HTTP अनुरोध बना सकते हैं, उदाहरण के लिए, JSON या XML- स्वरूपित डेटा।

ऑब्जेक्ट क्रमबद्धता/deserialization तर्क को सरल बनाने के लिए मुझे किसी भी परियोजना के बारे में पता नहीं है, हालांकि, यह आपका प्रश्न था।

क्लाइंट-साइड जीडब्ल्यूटी कोड जावास्क्रिप्ट में संकलित हो जाता है, इसलिए इससे कोई फर्क नहीं पड़ता कि आप इसका उपयोग करने के लिए किस सर्वर का उपयोग करते हैं।

+0

ठीक है, आपको केवल एएसपी.नेट एमवीसी का उपयोग कर रिमोट-प्रोसेस हैंडलर के लिए एएसपी.NET एप्लिकेशन रूटिंग के रूप में उनके उदाहरण जे 2 ईई लाइब्रेरी में मिले एक ही एपीआई को फिर से कार्यान्वित करना होगा। – Skeolan

+1

यह केवल तभी सच है यदि आप अपने बंडल आरपीसी तंत्र का उपयोग करना चाहते हैं। उस तंत्र को एक जेसन समर्थित आरपीसी तंत्र के साथ प्रतिस्थापित किया जा सकता है (मैंने gwt json rpc googled और कुछ परिणाम प्राप्त किए हैं), या आप एक आरईएसटी समर्थित आरपीसी तंत्र का भी उपयोग कर सकते हैं (इस http://code.google.com/p/ को आजमाएं gwt-rest /, या अधिक के लिए google, एक जोड़े हैं)। यानी, आरपीसी तंत्र प्रतिस्थापन योग्य है, और वहां पुस्तकालय हैं जो पहले से ही ऐसा करते हैं। – Chii

2

मैं वही चीज़ ढूंढ रहा हूं - मुझे कुछ ऐसा लगता है जो GWT एएसपी.Net के लिए स्क्रिप्ट # कहा जाता है। यह उसी व्यक्ति द्वारा लिखा गया है जो मुख्य रूप से एएसपी.नेट AJAX - निखिल कोठारी के लिए ज़िम्मेदार था। साइट है: http://projects.nikhilk.net/ScriptSharp

यह मूल रूप से सी # कोड लेता है और जावास्क्रिप्ट को यह संकलित - एक ही बात है कि GWT करता है (केवल यह है कि यह जावा के साथ करता है)

मैं ईमानदारी से लगता है कि GWT ASP.NET और साथ काम कर सकते यहां तक ​​कि एएसपी.नेट एमवीसी - मुझे लगता है कि जीएसटीटी के लिए काम करने के लिए आपको एएसपी.नेट में जेएसओएन या एक्सएमएल जेनेरिक हैंडलर (.ashx) की आवश्यकता होगी। मैं इसे अपने आप की कोशिश की नहीं किया ..

मुझे माफ कर दो अगर मैं किसी को भी भ्रमित कर दिया है ..

2

स्मार्ट GWT पुस्तकालय पर एक नजर डालें - अपने डेटा-बाइंडिंग परत सीधे सोप वेब सेवाओं (मानक .asmx) कॉल कर सकते हैं ।

24

मैं एक जीडब्ल्यूटी परियोजना पर काम कर रहा हूं जहां एएसपी.नेट सर्वर पर मेरा एकमात्र विकल्प है। मैंने पाया है कि, जबकि इसे थोड़ा अतिरिक्त काम की आवश्यकता है, JavaScript Overlay प्रकार इसे आसान बना सकते हैं। इससे कोई फ़र्क नहीं पड़ता कि आपका सर्वर किस तकनीक का उपयोग कर रहा है, जब तक कि यह JSON क्रमबद्ध डेटा के साथ प्रतिक्रिया दे सके। उदाहरण के लिए, यदि आप सी # में एक संपर्क वर्ग है:

public class Contact 
{ 
    public int Id { get; set; } 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public string Email { get; set; } 
} 

अपने सर्वर डिजाइन इतना है कि यह JSON के रूप में इस धारावाहिक देता है। मैं इसके लिए एएसपी.नेट एमवीसी का उपयोग करता हूं क्योंकि इसे बहुत कम काम की आवश्यकता होती है।यहाँ एक बहुत ही सरल उदाहरण है जहाँ हम कि संपर्क मान लेंगे एक स्थिर विधि है कि, एक आईडी को देखते हुए एक संपर्क उदाहरण वापस आ जाएगी है है:

public class ContactController : Controller 
{ 
    public ActionResult GetContact (int id) 
    { 
    return Json(Contact.GetById(id), JsonRequestBehavior.AllowGet); 
    } 
} 

अब आप अपने GWT आवेदन में, अपने संपर्क के लिए एक जावास्क्रिप्ट ओवरले प्रकार बनाने :

import com.google.gwt.core.client.JavaScriptObject; 

public class Contact extends JavaScriptObject { 
    protected Contact() { } 

    public final native int getContactId() /*-{ return this.Id; }-*/; 
    public final native String getLastName() /*-{ return this.LastName; }-*/; 
    public final native String getFirstName() /*-{ return this.FirstName; }-*/; 
    public final native String getEmail() /*-{ return this.Email; }-*/; 

    public static final native Contact createFromJson(String json) /*-{ 
    return eval('(' + json + ')'); 
    }-*/; 
} 

इसके बाद, अपने GWT परियोजना में, एक HTTP अनुरोध सर्वर के साथ संवाद करने के लिए उपयोग करें:

public class ContactLoader { 
    private int id; 

    public ContactLoader(int id) { 
    this.id = id; 
    } 

    public void beginLoad() { 
    String url = "/YourService/GetContact/?id=" + id; 
    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 
    try { 
     @SuppressWarnings("unused") 
     builder.sendRequest(null, new RequestCallback() { 
     @Override 
     public void onResponseReceived(Request req, Response resp) { 
      Contact contact = Contact.createFromJson(req.getText()); 
      // do something with your contact. In my project, I 
      // fire an event here for which the contact is the payload 
     } 

     @Override 
     public void onError(Request request, Throwable exception) { 
      // handle your error 
     } 
    catch (Exception exception) { 
     // handle your error 
    } 
    } 
} 

यह भी ओवरले प्रकार के साथ सामान्य प्रकार का उपयोग करना संभव है। उदाहरण के लिए, मैं कभी भी एक नंगे वस्तु वापस नहीं करता, मैं हमेशा परिवहन के लिए एक सामान्य कंटेनर का उपयोग करता हूं ताकि मैं आसानी से ग्राहक पक्ष पर त्रुटि रिपोर्टिंग को संभाल सकूं।

सी #:

public class ServerResponse<T> 
{ 
    public T Payload { get; set; } 
    public bool Success { get; set; } 
    public String Message { get; set; } 
} 

जावा:

public class ServerResponse<T extends JavascriptObject> 
    extends JavaScriptObject { 
    protected ServerResponse() { } 

    public final native T getPayload() /*-{ return this.Payload; }-*/; 
    public final native boolean getSuccess() /*-{ return this.Success; }-*/; 
    public final native String getMessage() /*-{ return this.Message; }-*/; 
} 

यह मुझे मेरे संपर्क, संपर्क या जो कुछ भी की एक सरणी लौटने की सुविधा देता है। यह आपके डेटा लोडिंग तर्क में डुप्लिकेशंस को कम करने में भी मदद करता है।

यह एक अत्यधिक सरल उदाहरण है, लेकिन उम्मीद है कि किसी भी गैर-जावा बैक-एंड के साथ सहायता की आवश्यकता वाले किसी व्यक्ति के लिए पथ साफ़ करने के लिए पर्याप्त है। मैट रायबल द्वारा ओवरले प्रकारों पर चर्चा करने वाले एक अन्य संसाधन को "JSON Parsing with JavaScript Overlay Types in GWT" पर मदद मिली।

+5

मुझे लगता है कि यह वह जवाब है जो प्रश्न का जवाब देता है। –

+0

ग्रेट उत्तर, अच्छी तरह से किया। यह शर्म की बात है कि आपका 'उत्तर' के रूप में चिह्नित नहीं था। – ianmayo

2

कोई भी इस प्रश्न को पढ़ रहा है: कृपया स्वीकृत उत्तर को अनदेखा करें। यह पूरी तरह से गलत है। ओपी एक एएसपी.Net बैकएंड के साथ जीडब्ल्यूटी का उपयोग करना चाहता है, वह एएसपी.Net का उपयोग कर जीडब्ल्यूटी का उत्पादन नहीं करना चाहता। जेएसओएन/जेएसओएनपी उत्पन्न करने वाली कोई बैकएंड भाषा जावास्क्रिप्ट ओवरले के माध्यम से जीडब्ल्यूटी के साथ त्वरित रूप से एकीकृत हो सकती है।

1

SharpKit आज़माएं, यह आपको सी # में लिखने और संकलन के दौरान जावास्क्रिप्ट में बदलने की अनुमति देता है। यह एक कमांड लाइन निष्पादन योग्य के रूप में भी उपलब्ध है। यह jQuery जैसी कई लोकप्रिय वेब पुस्तकालयों का समर्थन करता है, यह पूर्ण सी # 4 भाषा वाक्यविन्यास और .NET 4.0 का भी समर्थन करता है।

0

यदि आप स्मार्टजीडब्ल्यूटी का उपयोग कर रहे हैं, तो इसमें एक रेस्टडाटासोर्स शामिल है जो प्री-बिल्ट जेएसओएन या एक्सएमएल प्रोटोकॉल प्रदान करता है जिसे आप .NET में कार्यान्वित कर सकते हैं। हमारे सार्वजनिक विकी है लेख की इस श्रृंखला से पता चलता है कि सभी 4 CRUD संचालन लागू करता RestDataSource के लिए एक ASP.NET MVC बैकएंड, डेटाबेस लेनदेन और समर्थन SmartGWT AdvancedCriteria (NHibernate का प्रयोग करके) के लिए निर्माण करने के लिए कैसे:

http://wiki.smartclient.com/display/Main/Integrating+with+ASP.Net+MVC

इस में विशेष मामला, स्मार्ट क्लाइंट स्मार्टजीडब्ल्यूटी के बजाए इस्तेमाल किया गया था, लेकिन सभी बैकएंड कोड समान हैं (स्मार्टजीडब्ल्यूटी केवल स्मार्ट क्लाइंट के लिए जीडब्ल्यूटी समर्थन प्रदान करता है; यह हुड के नीचे एक ही कोड है)। फ्रंट-एंड कोड छोटा और आसानी से स्मार्टजीडब्ल्यूटी में अनुवादित है।

विकी पर यह कोड सभी मुफ़्त है, और इसी तरह स्मार्टजीडब्ल्यूटी का संपादन फ्रंट एंड (यह एलजीपीएल के तहत खुला स्रोत) बनाने के लिए आवश्यक है।

0

smcmahon के जवाब ने वास्तव में मेरी कंपनी को यह करने में मदद की, और अब हम नियमित रूप से ऐसा कर रहे हैं - जीडब्ल्यूटी का उपयोग करके फ्रंट एंड विकसित करना और .NET/MS प्रौद्योगिकियों के साथ बैकएंड।

मैं अपने पूरे जीवन में एक एमएस डेवलपर रहा हूं - नवीनतम बैकएंड के साथ नवीनतम चांदी की रोशनी। इसमें लगभग एक महीने का काम हुआ लेकिन आखिरकार हमने विजुअल स्टूडियो 2010 में विकसित .NET बैकएंड/वेब सेवाओं का उपयोग करके ग्रहण में एकल पृष्ठ जीडब्ल्यूटी ऐप्स विकसित करने के लिए एक चिकनी प्रक्रिया लागू की।नेट पक्ष हम एक्सएमएल की बजाय जेएसओएन में सभी ऑब्जेक्ट्स को प्राप्त/ट्रांसफर करते हैं (हम न्यूटॉन्सॉफ्ट जेएसओएन जेनरेटर का उपयोग करते हैं क्योंकि डब्ल्यूसीएफ वेब सेवाओं से .NET डिफ़ॉल्ट जेएसओएन पीढ़ी ने विशेष रूप से तिथियों के साथ समस्याएं दी हैं)। जीडब्ल्यूटी पक्ष पर हम ओवरले प्रकारों का उपयोग करते हैं।

हमने एक ऐप लिखा जो कोड (.NET ऐप से) उत्पन्न करता है और स्वचालित रूप से इसे हमारे जीडब्ल्यूटी प्रोजेक्ट में लिखता है - यह उन सभी वर्गों को उत्पन्न करता है जिन्हें हमें चाहिए और वेब सेवाओं को आसान कॉल के लिए भी कार्य लिखते हैं। इसके शीर्ष पर, हम जीडब्ल्यूटी में ऐप चलाने के दौरान .NET वेब सेवाओं को काम करने में सक्षम थे, जिससे इसे डीबग करना आसान हो जाता है। फिर जब हम परियोजना परिवर्तनों के साथ काम करते हैं, तो हम जावास्क्रिप्ट/एचटीएमएल को संकलित करते हैं - दृश्य स्टूडियो को कॉपी करते हैं, और हमारी परियोजना को तैनात करते हैं। आसान नहीं हो सका।

इस धागे की मदद से यह सब कुछ पता लगाने में काफी काम आया, लेकिन एक बार जब हम एसक्यूएल सर्वर बैकएंड और आईआईएस विंडोज सर्वर के साथ एक सीधी माइक्रोसॉफ्ट शॉप हैं, तो हम पूरी तरह से इसके लायक थे। सिल्वरलाइट बहुत अच्छा था, लेकिन अब हम उस बिंदु पर जा रहे हैं जहां कर्मचारियों को पैड मिल रहे हैं और उन्हें अपने फोन पर ऐप्स चलाने की भी आवश्यकता है।

हम इंटरफ़ेस के लिए UIBinder का उपयोग करते हैं। जीयूआई डिजाइनर/एक्सएमएल घोषणात्मक लेआउट, और मॉड्यूलरिटी से प्यार करें। यूआई में यूआईबिन्डर एचटीएमएल पैनलों के जरिये हम अभी भी किसी भी एचटीएमएल/सीएसएस का उपयोग कर सकते हैं। UiBinder डिजाइनर भी CSS3 टैग को पहचानता है और आईई 9 की तुलना में उन्हें बेहतर प्रदान करता है।

जीडब्ल्यूटी एक अच्छा समाधान था, और जावा सी # पृष्ठभूमि से आने के लिए सीखना बहुत आसान था।

संबंधित मुद्दे

 संबंधित मुद्दे