2009-03-19 18 views

Odpowiedz

1

myślę o robi to samo, ale nie natrafiłem jeszcze niczego.

Zastanawiam się nad wykorzystaniem JSON.net do komunikacji, więc zasadniczo piszę usługę REST w GAE, aby klient mógł zadzwonić, a może OAuth.NET do uwierzytelnienia (chyba że znajdę port .NET google one, jeszcze nie wyglądałem)

Silverlight jest w zasadzie po prostu .NET, chociaż jest to wersja lite, więc jeśli znajdziesz kod .NET do zrobienia czegoś, to powinno działać, przynajmniej w pewnym sensie, w SL:)

Ale to tyle, co ja - myślę o tym. Przepraszamy, nie możemy jeszcze pomóc!

-3

Pobierz demo na Expression Blend. Sprawdź dołączony samouczek, który pokazuje, jak stworzyć wspaniały interfejs Silverlight w trybie GUI i zintegrować go z usługą sieci wyszukiwania Bing. Manipulowanie tym przykładem w przykład Google'a powinno być trywialne. Powodzenia! :)

+1

Nie sądzę, że Bling API ma wiele wspólnego z GAE –

2

Oto moje podejście oparte w dużej mierze na Scott Seely's post Po prostu przekazuje XML, plik .xap jest również obsługiwany przez GAE. Właśnie wczoraj to działało, więc wciąż trwają prace.

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

Nie znalazłem przykładów, aby program Silverlight działał z pakietem Java SDK aplikacji Google, czyli here is my post.