2009-03-19 13 views

Antwort

1

Ich denke an das gleiche tun, aber ich habe über etwas noch nicht gekommen.

Ich denke darüber nach, JSON.net für die Kommunikation zu verwenden, also im Grunde einen REST-Service in GAE für den Client zu schreiben, und vielleicht OAuth.NET für die Authentifizierung (es sei denn, ich kann den .NET-Port des google one, ich habe noch nicht geschaut)

Silverlight ist im Grunde nur .NET, tho eine Lite-Version davon, also wenn Sie .NET-Code finden können, etwas zu tun, sollte es zumindest etwas in SL funktionieren:)

Aber das ist so weit wie ich habe - darüber nachzudenken. Sorry, kann noch nicht helfen!

-3

die Demo für Expression Blend zum Download. Sehen Sie sich das mitgelieferte Tutorial an, das zeigt, wie Sie eine wunderschöne Silverlight-Oberfläche im GUI-Modus erstellen und in den Bing-Such-Web-Service integrieren. Das Beispiel in ein Google-Beispiel zu manipulieren, sollte trivial sein. Viel Glück! :)

+1

Ich denke nicht, dass die Bling API viel mit GAE gemeinsam hat –

2

Hier ist mein Ansatz stark auf Scott Seely's post basiert Einfach XML übergibt, .xap wird auch von GAE bedient. Ich habe gerade erst gestern angefangen zu arbeiten, also ist es immer noch in Arbeit.

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

Ich konnte keine Beispiele finden, wie Silverlight mit dem Java SDK der Google App funktioniert, also here is my post.