Вы можете использовать этот фрагмент кода:
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
server.setHandler(context);
context.addServlet(new ServletHolder(new MetricsServlet()), "/prometheus");
В импорте нет пакетов sun, только Jetty и Java-клиент Prometheus :
import io.prometheus.client.exporter.MetricsServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
Я думаю о выполнении того же самого, но я ни с чем еще не столкнулся.
Я думаю об использовании JSON.net для comms, так в основном запись сервиса REST в GAE для клиента звонить, и возможно OAuth.NET для аутентификации (если я не могу найти порт.NET Google один, я еще не посмотрел),
Silverlight является в основном просто.NET, tho облегченная версия его, поэтому если можно найти, что код.NET делает что-то, она должна работать, по крайней мере несколько, в SL :)
Но это - насколько я имею - думающий об этом. Извините, еще не может иметь большего количества справки!
Я смотрю на это также. Существует несколько проектов REST для GAE, я еще не испытал ни одного из них, но надеюсь на следующей неделе или около этого.
http://code.google.com/p/app3/
Загрузите демонстрацию для Expression Blend . Ознакомьтесь с прилагаемым руководством, в котором показано, как создать великолепный интерфейс Silverlight в режиме графического интерфейса пользователя и интегрировать его с веб-службой поиска Bing. Преобразование этого примера в пример Google должно быть тривиальным. Удачи! :)
Ознакомьтесь с прилагаемым руководством, в котором показано, как создать великолепный интерфейс Silverlight в режиме графического интерфейса пользователя и интегрировать его с веб-службой поиска Bing. Преобразование этого примера в пример Google должно быть тривиальным. Удачи! :) Ознакомьтесь с прилагаемым руководством, в котором показано, как создать великолепный интерфейс Silverlight в режиме графического интерфейса пользователя и интегрировать его с веб-службой поиска Bing. Преобразование этого примера в пример Google должно быть тривиальным. Удачи! :)Here is my approach based heavily on Scott Seely's post Simply passes XML around, .xap is also served by GAE. I only just got this working yesterday so it is still work in progress.
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();
}
}
Мне не удалось найти никаких примеров, позволяющих заставить Silverlight работать с Java SDK приложения Google, поэтому вот мой пост .