2009-05-19 11 views
7

¿Existen buenas herramientas disponibles para usar GWT (el Google Web Toolkit) con una aplicación de servidor ASP.Net? El modelo de programación y las herramientas para GWT son bastante agradables, sin embargo, sería bueno si el back-end pudiera permanecer en C#/ASP.Net.¿Existen buenas herramientas para integrar GWT con ASP.Net?

¿Hay actualmente una buena solución disponible para esto?

Respuesta

7

De acuerdo con GWT FAQ, debería ser capaz de hacer esto.

El corazón de AJAX es realizar llamadas de lectura/escritura de datos a un servidor desde la aplicación JavaScript que se ejecuta en el navegador. GWT es "RPC agnóstico" y no tiene requisitos particulares sobre qué protocolo se utiliza para emitir solicitudes RPC o incluso en qué idioma está escrito el código del servidor. Aunque GWT proporciona una biblioteca de clases que hace que las comunicaciones RPC con un servidor J2EE sean extremadamente sencillas , no está obligado a usarlos. En su lugar, puede crear solicitudes HTTP personalizadas para recuperar, por ejemplo, datos con formato JSON o XML.

No tengo conocimiento de ningún proyecto para simplificar la lógica de serialización/deserialización de objetos, si esa era su pregunta.

El código GWT del lado del cliente se compila en JavaScript, por lo tanto, no importa qué servidor use para servirlo.

+0

Derecho, solo tendría que volver a implementar la misma API que se encuentra en su biblioteca J2EE de ejemplo como un enrutamiento de aplicaciones ASP.NET para manejadores de procedimientos remotos, tal vez utilizando ASP.NET MVC. – Skeolan

+1

eso solo es cierto si desea usar su mecanismo RPC incluido. Ese mecanismo puede ser reemplazado por un mecanismo RPC respaldado por json (busqué en Google gwt json rpc y obtuve un par de resultados), o incluso puede usar un mecanismo RPC respaldado por REST (pruebe esto http://code.google.com/p/ gwt-rest /, o google para más, hay un par). Es decir, el mecanismo RPC es reemplazable, y hay bibliotecas que ya lo hacen. – Chii

2

He estado buscando lo mismo: he encontrado algo similar a lo que hace GWT para ASP.Net llamado Script #. Está escrito por el mismo tipo que fue el principal responsable de ASP.NET AJAX - Nikhil Kothari. El sitio es: http://projects.nikhilk.net/ScriptSharp

Es básicamente toma el código C# y lo compila a Javascript - la misma cosa que hace GWT (sólo lo hace con Java)

honestamente creo que GWT puede trabajar con ASP.NET y incluso ASP.NET MVC: creo que necesitaría JSON o XML que sirviera a los controladores genéricos (.ashx) en ASP.NET para que GWT funcione. No he probado a mí mismo ..

Perdóname si he confundido a nadie ..

2

Tener un vistazo a la biblioteca de Smart - GWT su capa de enlace de datos puede llamar directamente a los servicios web SOAP (.asmx estándar) .

24

Estoy trabajando en un proyecto GWT donde ASP.NET es mi única opción en el servidor. He descubierto que, si bien requiere un poco de trabajo adicional, los tipos JavaScript Overlay pueden hacerlo más fácil. No importa qué tecnología esté usando su servidor, siempre que pueda responder con datos serializados de JSON. Por ejemplo, si usted tiene una clase de contacto en C#:

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

El diseño de su servidor para que devuelva esta serializado como JSON. Uso ASP.NET MVC para esto porque requiere muy poco trabajo.Aquí hay un ejemplo muy sencillo, donde vamos a suponer que el contacto tiene un método estático que, dado un id, devolverá una instancia de contacto:

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

Ahora, en su aplicación GWT, crear un tipo de superposición JavaScript para su Contacto :

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

a continuación, en su proyecto GWT, utilice una petición HTTP para comunicarse con el servidor:

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

también es posible utilizar tipos genéricos con los tipos de superposición. Por ejemplo, nunca devuelvo un objeto simple, siempre utilizo un contenedor genérico para el transporte para que pueda manejar fácilmente los informes de errores en el lado del cliente.

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

Esto me permite devolver mi contacto, una serie de contactos o lo que sea. También ayuda a reducir la duplicación en la lógica de carga de datos.

Este es un ejemplo demasiado simple, pero con suerte es suficiente para despejar el camino a cualquiera que necesite ayuda con un back-end que no sea Java. Otro recurso que encontré útil que analiza los tipos de superposición es "JSON Parsing with JavaScript Overlay Types in GWT" de Matt Raible.

+5

Creo que esta es la respuesta que responde a la pregunta. –

+0

Gran respuesta, bien hecho. Es una pena que el tuyo no haya sido marcado como "Respuesta". – ianmayo

2

Cualquiera que lea esta pregunta: ignore la respuesta aceptada. Está completamente equivocado. El OP desea usar GWT con un back-end ASP.Net, no quiere producir GWT usando ASP.Net. Cualquier lenguaje de back-end que pueda producir JSON/JSONP puede integrarse rápidamente con GWT a través de superposiciones de Javascript.

1

Pruebe SharpKit, le permite escribir en C# y convertir a JavaScript durante la compilación. También está disponible como un ejecutable de línea de comando. Es compatible con muchas bibliotecas web populares como jQuery, también es compatible con sintaxis de lenguaje C# 4 y .NET 4.0.

0

Si está utilizando SmartGWT, incluye un RestDataSource que proporciona un protocolo JSON o XML preconstruido que puede implementar en .NET. Esta serie de artículos de nuestro wiki pública muestra cómo construir un backend para ASP.NET MVC RestDataSource que implementa los 4 un mantenimiento, las transacciones de bases de datos y soporte para SmartGWT AdvancedCriteria (usando NHibernate):

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

En este caso particular, se usó SmartClient en lugar de SmartGWT, pero todo el código de back-end es idéntico (SmartGWT solo proporciona soporte GWT para SmartClient, es el mismo código bajo el capó). El código del front-end es trivial y se traduce fácilmente a SmartGWT.

Este código en la wiki es totalmente gratuito, y también lo es la edición de SmartGWT necesaria para construir el front-end (es de código abierto bajo la LGPL).

0

La respuesta de smcmahon realmente ayudó a mi empresa a poner esto en marcha, y ahora lo estamos haciendo regularmente, desarrollando la interfaz usando GWT y el back-end con tecnologías .NET/MS.

He sido desarrollador de MS toda mi vida: la última interfaz de Silverlight con .net backend. tomó aproximadamente un mes de trabajo, pero finalmente implementamos un proceso sencillo para desarrollar aplicaciones GWT de una sola página en Eclipse, utilizando servicios web/backend .NET desarrollados en Visual Studio 2010. En el.En el lado de la red recibimos/transferimos todos los objetos en JSON en lugar de XML (usamos el generador Newtonsoft JSON porque la generación JSON predeterminada de .NET desde los servicios web WCF causó problemas, especialmente con las fechas). En el lado de GWT usamos tipos de superposición.

Escribimos una aplicación que genera código (desde la aplicación .NET) y lo escribe automáticamente en nuestro proyecto GWT - genera todas las clases que necesitamos y también escribe funciones para llamadas fáciles a los servicios web. Además de esto, pudimos hacer funcionar los servicios web de .NET mientras ejecutamos la aplicación en GWT, lo que facilita su depuración. luego, cuando terminemos con los cambios del proyecto, compilamos en javascript/html, copiamos eso en Visual Studio e implementamos nuestro proyecto. no podría ser más simple.

Tomar un montón de trabajo resolver todo esto con la ayuda de este hilo, pero TOTALMENTE valió la pena una vez que lo hicimos, ya que somos una tienda de Microsoft directa con backend de servidor SQL y servidores de Windows IIS. Silverlight estuvo genial, pero ahora nos estamos moviendo al punto en que el personal está recibiendo blocs y también necesita ejecutar aplicaciones en sus teléfonos.

Usamos UIBinder para la interfaz. Me encanta el diseño declarativo GUI/xml y la modularidad. Todavía podemos usar cualquier HTML/CSS que desee al tener los paneles HTML de UiBinder en la UI. El diseñador de uiBinder incluso reconoce etiquetas CSS3 y las renderiza mejor que IE9.

GWT fue una gran solución, y Java fue muy fácil de aprender viniendo de un fondo C#.

Cuestiones relacionadas