Silverlight에서 Google App Engine을 사용하는 방법에 대한 좋은 예가 있으며, 사용자 정의 웹 서비스를 작성하지 않는 것이 좋습니다.Silverlight의 Google App Engine
건배
닉
Silverlight에서 Google App Engine을 사용하는 방법에 대한 좋은 예가 있으며, 사용자 정의 웹 서비스를 작성하지 않는 것이 좋습니다.Silverlight의 Google App Engine
건배
닉
내가 같은 일을하고 생각 해요,하지만 난 아직 아무것도 건너 적이 없다.
나는 통신을 위해 JSON.net을 사용하는 것에 대해 생각하고있다. 그래서 기본적으로 클라이언트를 위해 GAE에서 REST 서비스를 작성하고 인증을 위해 OAuth.NET을 작성한다. 구글 1, 아직 보지 못했다)
실버 라이트는 기본적으로 .NET이다. 라이트 라이트 버전이기 때문에 .NET 코드를 사용하면 SL에서 다소 효과가있다.)
내가 가지고있는 한 그것은 생각한다. 그것에 대해 생각한다. 죄송합니다. 아직 더 많은 도움을 드릴 수 없습니다!
나는 이것 또한보고있다. GAE에 대한 몇 가지 REST 프로젝트가 있지만 아직 시도하지는 않았지만 다음 주 정도에 진행할 예정입니다.
http://code.google.com/p/gae-json-rest/
http://code.google.com/p/app3/
는 Expression Blend에 대한 데모를 다운로드합니다. GUI 모드에서 멋진 Silverlight 인터페이스를 생성하고 Bing 검색 웹 서비스와 통합하는 방법을 보여주는 자습서를 확인하십시오. 이 예제를 Google 예제로 조작하는 것은 쉽지 않습니다. 행운을 빕니다! :)내 접근 방법은 크게 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();
}
}
Silverlight가 Google 앱의 Java SDK와 호환되도록하는 예제를 찾지 못했습니다. here is my post.
블링 API가 GAE와 공통점이 많지 않다고 생각합니다. –