2009-03-19 10 views
7

Silverlight에서 Google App Engine을 사용하는 방법에 대한 좋은 예가 있으며, 사용자 정의 웹 서비스를 작성하지 않는 것이 좋습니다.Silverlight의 Google App Engine

건배

답변

1

내가 같은 일을하고 생각 해요,하지만 난 아직 아무것도 건너 적이 없다.

나는 통신을 위해 JSON.net을 사용하는 것에 대해 생각하고있다. 그래서 기본적으로 클라이언트를 위해 GAE에서 REST 서비스를 작성하고 인증을 위해 OAuth.NET을 작성한다. 구글 1, 아직 보지 못했다)

실버 라이트는 기본적으로 .NET이다. 라이트 라이트 버전이기 때문에 .NET 코드를 사용하면 SL에서 다소 효과가있다.)

내가 가지고있는 한 그것은 생각한다. 그것에 대해 생각한다. 죄송합니다. 아직 더 많은 도움을 드릴 수 없습니다!

-3

http://code.google.com/p/gae-json-rest/

http://code.google.com/p/app3/

Expression Blend에 대한 데모를 다운로드합니다. GUI 모드에서 멋진 Silverlight 인터페이스를 생성하고 Bing 검색 웹 서비스와 통합하는 방법을 보여주는 자습서를 확인하십시오. 이 예제를 Google 예제로 조작하는 것은 쉽지 않습니다. 행운을 빕니다! :)

+1

블링 API가 GAE와 공통점이 많지 않다고 생각합니다. –

2

내 접근 방법은 크게 Scott Seely's post에 기반합니다. 단순히 XML을 전달하고, .xap도 GAE에서 제공합니다. 나는 단지 어제 일하고있다. 그래서 아직 진행중이다.

구글 :

애플리케이션 제목을

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() 

실버 :

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

Silverlight가 Google 앱의 Java SDK와 호환되도록하는 예제를 찾지 못했습니다. here is my post.