Service Stack の Hello World の例を機能させることができましたが、今はそれを少し拡張して、カスタムのSiteオブジェクトを返そうとしています。jQuery を使用して結果を取得する簡単なテスト html ファイルを作成しましたが、Siteオブジェクトが返されません (と思います)。
ここに私のWebサービスがあります:
using Funq;
using ServiceStack.ServiceInterface;
using ServiceStack.WebHost.Endpoints;
using System;
namespace My.WebService
{
public class SiteRepository
{
}
public class Site
{
public string Name { get; set; }
public string Uri { get; set; } //switch to the real uri class if you find it useful
}
public class SiteService : Service //: RestServiceBase<Site>
{
public SiteRepository Repository { get; set; } //Injected by IOC
public object Get(Site request)
{
//return new Site { Name = "Google", Uri = "http://www.google.com" };
return new SiteResponse {Result = new Site {Name = "Google", Uri = "http://www.google.com"}};
}
}
public class SiteResponse
{
public Site Result { get; set; }
}
public class SiteAppHost : AppHostBase
{
public SiteAppHost()
: base("Site Web Services", typeof(SiteService).Assembly)
{
}
public override void Configure(Container container)
{
container.Register(new SiteRepository());
Routes
.Add<Site>("/site")
.Add<Site>("/site/{Id}/");
}
}
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
new SiteAppHost().Init();
}
protected void Session_Start(object sender, EventArgs e)
{
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
}
protected void Application_Error(object sender, EventArgs e)
{
}
protected void Session_End(object sender, EventArgs e)
{
}
protected void Application_End(object sender, EventArgs e)
{
}
}
}
jQuery を使用したテスト HTML ファイルを次に示します。?callback=? を追加しました。Web サービスと呼び出しの両方を同じマシンから実行しているためです。
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
// we will add our javascript code here
$(document).ready(function() {
// do stuff when DOM is ready
alert("Hello world!");
//the ?callback=? part is for testing on the same server as the web service
$.getJSON("http://localhost:61549/site?callback=?", function(sitesReturned) {
alert(sitesReturned); // alert box contains: [object Object]
alert(sitesReturned.Name); //alert box contains: undefined
alert(sitesReturned.length == 1) //alert box contains: false
var parsed = JSON.parse(sitesReturned); //this fails silently
alert(parsed.Name); // the alert box does not load
});
alert("Goodbye world!");
});
</script>
</head>
<body>
<!-- we will add our HTML content here -->
Hello
</body>
</html>