当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《有没有什么好的工具可以将GWT与ASP.Net集成?》经验,为你挑选了2个好方法。

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

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



1> smcmahon..:

我正在开发一个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 
{
  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解析 ".


我认为这是回答这个问题的答案.

2> ykaganovich..:

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

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

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

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

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有