是否有任何好的工具可用于将GWT(Google Web Toolkit)与ASP.Net服务器应用程序一起使用? GWT的编程模型和工具非常好,但是如果后端可以保留在C#/ ASP.Net中则会很好。
目前是否有适合的解决方案?
答案 0 :(得分:24)
我正在开发一个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
}
}
}
也可以使用具有覆盖类型的泛型类型。例如,我从不返回一个裸对象,我总是使用通用容器进行传输,这样我就可以轻松处理客户端的错误报告。
C#:
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; }-*/;
}
这让我可以返回我的联系人,一组联系人或其他什么。它还有助于减少数据加载逻辑中的重复。
这是一个非常简单的示例,但希望它足以为任何需要非Java后端帮助的人清除路径。我发现有助于讨论叠加类型的另一个资源是Matt Raible的“JSON Parsing with JavaScript Overlay Types in GWT”。
答案 1 :(得分:7)
根据GWT FAQ,您应该可以这样做。
AJAX的核心是从浏览器中运行的JavaScript应用程序对服务器进行数据读/写调用。 GWT是“RPC不可知的”,对于用于发出RPC请求的协议,甚至服务器代码编写的语言都没有特别的要求。虽然GWT提供了一个类库,使得与J2EE服务器的RPC通信非常容易,您不需要使用它们。相反,您可以构建自定义HTTP请求以检索,例如,JSON或XML格式的数据。
我不知道有任何简化对象序列化/反序列化逻辑的项目,如果那是你的问题。
客户端GWT代码被编译为javascript,因此用于服务它的服务器并不重要。
答案 2 :(得分: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。我自己没试过..
如果我困惑任何人,请原谅我。
答案 3 :(得分:2)
查看Smart GWT库 - 它的数据绑定层可以直接调用SOAP Web服务(标准.asmx)。
答案 4 :(得分:2)
有人在阅读这个问题:请忽略已接受的答案。这完全是错的。 OP希望将GWT与ASP.Net后端一起使用,他不想使用ASP.Net生成GWT。任何可以生成JSON / JSONP的后端语言都可以通过Javascript叠加快速与GWT集成。
答案 5 :(得分:1)
尝试SharpKit,它允许您使用C#编写,并在编译期间转换为JavaScript。它还可用作命令行可执行文件。它支持许多流行的Web库,如jQuery,它还支持完整的C#4语言语法和.NET 4.0。
答案 6 :(得分: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。
wiki上的这段代码都是免费的,构建前端所需的SmartGWT编辑也是免费的(它是LGPL下的开源代码)。
答案 7 :(得分:0)
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服务正常运行,这使得它很容易调试。然后当我们完成项目更改时,我们编译为javascript / html - 将其复制到visual studio,并部署我们的项目。不可能更简单。
在这个帖子的帮助下完成所有这些工作需要做很多工作,但是因为我们是一个拥有SQL服务器后端和IIS Windows服务器的直接微软商店,所以我们完全值得。 Silverlight非常棒,但现在我们正在努力工作人员获得打击垫,并且还需要在手机上运行应用程序。
我们使用UIBinder作为界面。喜欢GUI设计器/ xml声明性布局和模块化。通过在UI中使用UiBinder HTML面板,仍然可以使用我们想要的任何HTML / CSS。 uiBinder设计师甚至可以识别CSS3标签并使它们比IE9更好。
GWT是一个很好的解决方案,Java很容易从C#背景中学习。