有没有什么好的工具可以将GWT与ASP.Net集成?

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

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

我正在开发一个GWT项目,其中ASP.NET是我在服务器上唯一的选择。 我发现,虽然它需要一些额外的工作, JavaScript Overlay类型可以让它变得简单。 无论您的服务器使用何种技术,只要它可以使用JSON序列化数据进行响应。 例如,如果您在C#中有一个Contact类:

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是因为它需要很少的工作。 这是一个非常简单的例子,我们假设Contact有一个静态方法,给定一个id,它将返回一个Contact实例:

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

也可以使用具有覆盖类型的generics类型。 例如,我从不返回裸对象,我总是使用通用容器进行传输,以便我可以轻松处理客户端的错误报告。

C#:

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

Java的:

 public class ServerResponse 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 Raible的“使用GWT中的JavaScript覆盖类型进行JSON解析 ”。

根据GWT FAQ ,你应该能够做到这一点。

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

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

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

我一直在寻找同样的东西 – 我发现了类似于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。 我自己没试过..

如果我困惑任何人,请原谅我..

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

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

试试SharpKit ,它允许你用C#编写,并在编译期间转换为JavaScript。 它还可用作命令行可执行文件。 它支持许多流行的Web库,如jQuery,它还支持完整的C#4语言语法和.NET 4.0。

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

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

在这种特殊情况下,使用SmartClient而不是SmartGWT,但所有后端代码都是相同的(SmartGWT只为SmartClient提供GWT支持;它是引擎盖下的相同代码)。 前端代码很简单,很容易转换为SmartGWT。

维基上的这个代码都是免费的,构建前端所需的SmartGWT编辑也是免费的(它是LGPL下的开源代码)。

smcmahon的回答真正帮助我的公司实现了这一目标,现在我们正在经常这样做 – 使用GWT开发前端,使用.NET / MS技术开发后端。

我一生都是MS开发人员 – 最新的带有.net后端的Silverlight前端。 它花了大约一个月的工作但最后我们使用Visual Studio 2010中开发的.NET后端/ Web服务实现了在Eclipse中开发单页GWT应用程序的流畅过程。在.NET端,我们在JSON中接收/传输所有对象而不是XML(我们使用Newtonsoft JSON生成器,因为来自WCF Web服务的.NET默认JSON生成会产生问题,尤其是日期)。 在GWT方面,我们使用覆盖类型。

我们编写了一个应用程序,它生成代码(来自.NET应用程序)并自动将其写入我们的GWT项目 – 它生成我们需要的所有类,并编写函数以便轻松调用Web服务。 最重要的是,我们能够在GWT中运行应用程序时使.NET Web服务正常运行,这使得WAY易于调试。 然后当我们完成项目更改时,我们编译为javascript / html – 将其复制到visual studio,并部署我们的项目。 不可能更简单。

在这个线程的帮助下完成所有这些工作需要做很多工作,但是一旦我们做了,因为我们是一个拥有SQL服务器后端和IIS Windows服务器的直接微软商店,所以完全值得。 Silverlight非常棒,但现在我们正在努力工作人员获得打击垫,并且还需要在手机上运行应用程序。

我们使用UIBinder作为界面。 喜欢GUI设计器/ xml声明性布局和模块化。 通过在UI中使用UiBinder HTML面板,仍然可以使用我们想要的任何HTML / CSS。 uiBinder设计师甚至可以识别CSS3标签并使它们比IE9更好。

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