2009-05-19 253 views
7

是否有任何好的工具可用于使用GWT(Google Web Toolkit)和ASP.Net服务器应用程序? GWT的编程模型和工具非常好,但是,如果后端可以保留在C#/ ASP.Net中,那将会很不错。有什么好的工具可以整合GWT和ASP.Net吗?

目前有很好的解决方案吗?

回答

7

根据GWT FAQ,你应该可以做到这一点。

AJAX的核心是从运行在浏览器中的JavaScript应用程序对服务器进行数据读/写调用。 GWT是“RPC不可知的”,并且对使用哪种协议发布RPC请求,甚至是用什么语言编写服务器代码没有特别的要求。尽管GWT提供了一个类库,使得与J2EE服务器的RPC通信非常容易,你不需要使用它们。相反,您可以构建自定义HTTP请求来检索例如JSON或XML格式的数据。

我不知道任何项目来简化对象的序列化/反序列化逻辑,但如果这是你的问题。

客户端GWT代码被编译为javascript,因此使用它来服务它的服务器并不重要。

+0

右键,你只需要重新实现他们的榜样J2EE库中发现的ASP.NET应用程序的路由远程过程处理程序,可能使用ASP.NET MVC相同的API。 – Skeolan 2009-05-20 00:21:00

+1

只有当你想使用他们的捆绑RPC机制才是真的。这种机制可以用JSON支持RPC机制来代替(我用Google搜索GWT JSON RPC和有一对夫妇的结果),或者你甚至可以使用REST支持的RPC机制(试试这个http://code.google.com/p/ gwt-rest /,或谷歌更多,有一对夫妇)。也就是说,RPC机制是可以替换的,并且有已经存在的库。 – Chii 2009-05-20 12:10:15

2

我一直在寻找同样的东西 - 我发现了一些类似于GWT为ASP.Net所做的名为Script#的东西。它是由主要负责ASP.NET AJAX的同一个人编写的 - Nikhil Kothari。该网站是:http://projects.nikhilk.net/ScriptSharp

它基本上采用C#代码并将其编译为Javascript - 这GWT做同样的事情(只有它它与Java)

老实说,我认为GWT可以与ASP.NET和工作甚至ASP.NET MVC - 我认为你需要JSON或XML服务于ASP.NET中的通用处理程序(.ashx)以便GWT工作。我还没有尝试过自己..

原谅我,如果我一直困惑的人..

2

看一看智能GWT库 - 它的数据绑定层可以直接调用SOAP Web服务(标准的.asmx) 。

24

我正在开发一个GWT项目,其中ASP.NET是我唯一的服务器选项。我发现,虽然它需要一些额外的工作,但JavaScript Overlay类型可以使它变得容易。无论服务器使用什么技术都无所谓,只要它能够响应JSON序列化数据即可。举例来说,如果你在C#中的联系人类:

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

设计您的服务器,使其返回此序列化为JSON。我为此使用ASP.NET MVC,因为它需要很少的工作。这里是一个非常简单的例子,我们将假设联系了,有这样的标识,将返回一个跟实例的静态方法:

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

现在,在您的GWT应用程序,为您的联系人创建一个JavaScript覆盖类型:

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 
    } 
    } 
} 

也可以使用泛型类型与覆盖类型。例如,我永远不会返回一个裸露的对象,我总是使用一个通用的容器进行传输,这样我就可以轻松处理客户端的错误报告。

C#:

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

的Java:

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; }-*/; 
} 

这让我回到我的联系方式,联系人或任何数组。它还有助于减少数据加载逻辑中的重复。

这是一个过于简单的例子,但我希望它足以扫清道路的人需要与非Java后端帮助。我发现讨论覆盖类型的另一个资源是Matt Larible的“JSON Parsing with JavaScript Overlay Types in GWT”。

2

有人读到这个问题:请忽略接受的答案。这是完全错误的。 OP想要使用带有ASP.Net后端的GWT,他不想使用ASP.Net生成GWT。任何可以生成JSON/JSONP的后端语言都可以通过Javascript叠加与GWT快速集成。

1

尝试SharpKit,它可以让你在C#编写和编译过程中转换为JavaScript。它也可用作命令行可执行文件。它支持许多流行的网络库,如jQuery,它还支持完整的C#4语言语法和.NET 4.0。

0

如果使用SmartGWT的,它包括一个RestDataSource它提供了可以在.NET实现预建的JSON或XML协议。该系列从我们的公共维基文章展示了如何建立RestDataSource为SmartGWT的AdvancedCriteria(使用NHibernate)的ASP.NET MVC后端实现所有4个CRUD操作,数据库事务和支持:

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

在这在特殊情况下,使用SmartClient而不是SmartGWT,但所有后端代码都是相同的(SmartGWT仅提供对SmartClient的GWT支持;它与底层的代码相同)。前端代码很简单,很容易转换成SmartGWT。

此代码在wiki上都是免费的,所以是SmartGWT的的编辑需要建立前端(这是在LGPL下开源的)。

0

smcmahon的回答还真的帮了我公司得到这个打算,现在我们经常这样做 - 开发使用GWT和与.NET/MS技术与后端的前端。

我是一个MS开发我的整个生命 - 最新的Silverlight前端与后端的.NET。花了大约一个月的时间完成工作,但最终我们实现了一个平滑的过程,在Eclipse中使用Visual Studio 2010中开发的.NET后端/ Web服务开发单页GWT应用程序。我们使用JSON而不是XML接收/传输所有对象(我们使用Newtonsoft JSON生成器,因为WCF Web服务的.NET默认JSON生成给出了问题,尤其是在日期方面)。在GWT方面,我们使用覆盖类型。

我们写生成代码(从.NET应用程序),并自动将其写入我们的GWT项目的应用程序 - 它产生,我们需要所有的课程,也为方便调用Web服务写入功能。最重要的是,我们能够在GWT中运行应用程序时使.NET Web服务正常运行,这使得它易于调试。那么当我们完成项目更改时,我们编译为javascript/html - 将其复制到Visual Studio,然后部署我们的项目。不能简单一些。

在这个线程的帮助下,我们花了很多工作来完成这项工作,但是一旦我们做到了这一点,就完全值得,因为我们是一个带有SQL服务器后端和IIS窗口服务器的直销微软商店。 Silverlight非常棒,但是现在我们正在转移到工作人员需要在手机上运行应用程序的地步。

我们用UiBinder的对接口。喜欢GUI designer/xml声明式布局和模块化。通过在用户界面中使用UiBinder HTML面板,仍然可以使用我们想要的任何HTML/CSS。 uiBinder设计师甚至可以识别CSS3标签并且比IE9更好地呈现它们。

GWT是一个很好的解决方案,而Java是非常容易学习从C#背景的。

相关问题