2009-03-19 10 views

Répondre

1

Je pense à faire la même chose, mais je ne l'ai pas rencontré encore rien.

Je pense à utiliser JSON.net pour les communications, donc essentiellement écrire un service REST dans GAE pour le client à appeler, et peut-être OAuth.NET pour l'authentification (sauf si je peux trouver le port .NET de la google un, je n'ai pas encore regardé)

Silverlight est fondamentalement juste .NET, une version allégée de celui-ci, donc si vous pouvez trouver le code .NET pour faire quelque chose, il devrait fonctionner, au moins un peu, dans SL: Mais c'est aussi loin que j'ai - en y réfléchissant. Désolé, ne peut pas être plus utile encore!

-3

Téléchargez la démo pour Expression Blend. Consultez le tutoriel inclus qui montre comment créer une superbe interface Silverlight en mode GUI et l'intégrer avec le service Web de recherche Bing. Manipuler cet exemple dans un exemple de Google devrait être trivial. Bonne chance! :)

+1

Je ne pense pas que l'API Bling ait beaucoup en commun avec GAE –

2

Voici mon approche basée fortement sur Scott Seely's post Simplement passe XML autour, .xap est également servi par GAE. Je viens juste d'avoir ce travail hier, donc c'est encore en cours.

Google:

app.yaml

application: wowbosscards 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /WowBossCards.html 
    static_files: WowBossCards.html 
    upload: WowBossCards.html 
    mime_type: text/html 
- url: /clientaccesspolicy.xml 
    static_files: clientaccesspolicy.xml 
    upload: clientaccesspolicy.xml 
    mime_type: text/xml 
- url: /WowBossCards.xap 
    static_files: WowBossCards.xap 
    upload: WowBossCards.xap 
    mime_type: application/x-silverlight-app 
- url: .* 
    script: wowbosscards.py 

wowbosscards.py

#!/usr/bin/env python 

import cgi 
import datetime 
import wsgiref.handlers 
import os 
import logging 
import string 
import urllib 

from google.appengine.ext import db 
from google.appengine.api import users 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 

class Xml(db.Model): 
    xmlContent = db.TextProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 


class XmlCrud(webapp.RequestHandler): 
    def get(self, xmlType): 

    xmlKey = string.capitalize(xmlType) 
    xml = Xml.get_by_key_name(xmlKey) 
    self.response.headers['Content-Type'] = "application/xml" 

    self.response.out.write(xml.xmlContent) 

    def post(self, xmlType): 

    logging.debug("XmlCrud POST") 
    xmlKey = string.capitalize(xmlType) 
    xml = Xml.get_by_key_name(xmlKey) 
    if len(self.request.get('content')) > 0 : 
     xml.xmlContent = self.request.get('content') 
    else: 
     xml.xmlContent = self.request.body 
    xml.put() 

    self.redirect('/upload/' + xmlType) 


def main(): 
    Xml.get_or_insert("Bosses", xmlContent="<a>Bosses go here</a>") 
    Xml.get_or_insert("Dungeons", xmlContent="<a>Dungeons go here</a>") 
    application = webapp.WSGIApplication([ 
              (r'/xml/(.*)', XmlCrud), 
             ], debug=True) 
    wsgiref.handlers.CGIHandler().run(application) 


if __name__ == '__main__': 
    main() 

Silverlight:

private class RequestExtended 
{ 
    public VoidCall CallBack; 
    public WebRequest Request; 
    public Uri Host; 

    public RequestExtended(WebRequest request, VoidCall callBack, Uri host) 
    { 
     Request = request; 
     CallBack = callBack; 
     Host = host; 
    } 
} 

public static void ImportFromGoogle(Uri host, VoidCall callBack) 
{ 
    try 
    { 
     if (host.Host == "localhost") 
     { 
      host = new Uri(host.Scheme + @"://" + host.Host + ":8080"); 
     } 
     var bossesCrud = new Uri(host, "/xml/bosses"); 
     var bossesRequest = WebRequest.Create(bossesCrud); 
     bossesRequest.BeginGetResponse(BossesResponse, new RequestExtended(bossesRequest, callBack, host)); 
    } 
    catch (Exception ex) 
    { 

    } 
} 

public static void BossesResponse(IAsyncResult result) 
{ 
    var requestExtended = result.AsyncState as RequestExtended; 
    try 
    { 
     WebResponse response = requestExtended.Request.EndGetResponse(result); 
     Stream responseStream = response.GetResponseStream(); 

     byte[] bytes = new byte[response.ContentLength]; 
     responseStream.Read(bytes, 0, bytes.Length); 
     responseStream.Close(); 

     var enc = new System.Text.UTF8Encoding(); 
     string xml = enc.GetString(bytes, 0, bytes.Length); 

     bosses = GetCollectionFromXmlString<BossCollection>(xml); 

     if (requestExtended.CallBack != null) requestExtended.CallBack(); 
    } 
    catch (WebException we) 
    { 
     HttpWebResponse response = (HttpWebResponse)we.Response; 
     response.Close(); 
    } 
    catch (Exception e) 
    { 
    } 
} 




public static void SaveBossesToGoogle(Uri host) 
{ 
    if (host.Host == "localhost") 
    { 
     host = new Uri(host.Scheme + @"://" + host.Host + ":8080"); 
    } 
    var bossesCrud = new Uri(host, "/xml/bosses"); 
    var request = WebRequest.Create(bossesCrud); 
    request.Method = "POST"; 
    request.ContentType = "text/xml"; //"application/x-www-form-urlencoded"; 

    request.BeginGetRequestStream(GetSaveBossesRequestStreamCallback, new RequestExtended(request, null, host)); 
} 

static void GetSaveBossesRequestStreamCallback(IAsyncResult result) 
{ 
    var requestExtended = result.AsyncState as RequestExtended; 
    try 
    { 
     Stream stream = requestExtended.Request.EndGetRequestStream(result); 
     var xmlSerializer = new XmlSerializer(typeof(BossCollection)); 
     var xmlText = new StringBuilder(); 

     using (TextWriter textWriter = new StringWriter(xmlText)) 
     { 
      xmlSerializer.Serialize(textWriter, Store.Bosses); 
      textWriter.Close(); 
     } 

     var enc = new System.Text.UTF8Encoding(); 
     var bytes = enc.GetBytes(xmlText.ToString()); 

     stream.Write(bytes, 0, bytes.Length); 
     stream.Close(); 
     requestExtended.Request.BeginGetResponse(SaveResponse, requestExtended); 
    } 
    catch (WebException we) 
    { 
     HttpWebResponse response = (HttpWebResponse)we.Response; 
     response.Close(); 
    } 
} 


static void SaveResponse(IAsyncResult result) 
{ 
    var requestExtended = result.AsyncState as RequestExtended; 
    try 
    { 
     WebResponse response = requestExtended.Request.EndGetResponse(result); 
     if (requestExtended.CallBack != null) requestExtended.CallBack(); 
    } 
    catch (WebException we) 
    { 
     HttpWebResponse response = (HttpWebResponse)we.Response; 
     response.Close(); 
    } 
} 
1

Je n'ai trouvé aucun exemple d'utilisation de Silverlight avec le Java SDK de google app, donc here is my post.

Questions connexes