我创建了服务堆栈angularjs vs模板应用程序。最初我有
• X.AngularJS
• X.AngularJS.ServiceInterface
• X.AngularJS.ServiceModel
• X.AngularJS.Tests
我使用RavenDb
作为数据存储区。
在X.AngularJS
上有AppHost.cs
个配置对象,我在其中定义DocumentStore
并访问数据库。
public override void Configure(Container container)
{
var store = new DocumentStore()
{
Url = "http://...",
DefaultDatabase = "somedb"
}.Initialize();
...
}
现在,如果我在这个项目中创建了Service实例(MySimpleService.cs)(X.AngularJS
),一切正常,我可以访问
IDocumentSession,我将用它来检索数据。
然而,不推荐这种方法(至少在我看来),为什么会是X.AngularJS.ServiceModel
项目。我还查看了http://razor.servicestack.net/
,其中服务与AppHost.cs
一起嵌入到单个项目中。
所以,我会遵循这个4项目模板(从vs服务堆栈angularjs模板开箱创建)。
考虑到这一点,您可以建议我如何使用(在大多数基本示例中)X.AngularJS.ServiceModel
和X.AngularJS
与ravendb数据库。
答案 0 :(得分:2)
我建议使用随Visual Studio的ServiceStackVS插件一起安装的带有AngularJS 模板的 ServiceStack ASP.NET。我将使用在使用模板生成代码时默认使用的项目名称。
AngularJSWebApp1 :这是客户端AngularJS项目。它确实有一些ASP.NET代码(即default.cshtml,Global.asax),但这些代码仅用于管理布局。 default.cshtml中定义的AngularJS应用程序是一个完整的客户端应用程序 - 它返回服务器的唯一行程是数据(通过/ hello URI)。此项目与ServiceStack Web服务项目之间的所有通信都应由AngularJS代码启动。
AngularJSWebApp1.ServiceInterface :此项目定义服务(即,一旦webservice收到特定请求,该怎么做)。对于默认项目,响应是一个简单的字符串。但是,这是您希望调用数据库的地方(在您的情况下为RavenDB)。
AngularJSWebApp1.ServiceModel :此项目定义请求和响应对象,并将它们映射到特定的URI路由。例如,当请求进入URI / hello / user1765862时,ServiceStack将实例化一个新的Hello类并将Name属性设置为“user1765862”。然后,此Hello对象实例将传递给AngularJSWebApp1.ServiceInterface.MyServices.Any()方法。
AngularJSWebApp1.Tests :该项目演示了如何对您的服务进行单元测试。
注意依赖链。 AngularJSWebApp1.ServiceModel
是AngularJSWebApp1.ServiceInterface
的依赖关系。后者需要在前者中定义的类的实例,以便对请求对象执行操作。 AngularJSWebApp1.ServiceModel
和AngularJSWebApp1.ServiceInterface
都是AngularJSWebApp1
的依赖关系。由于这是唯一的ASP.NET项目,因此它用于托管AngularJS应用程序和ServiceStack Web服务。请注意<httpHandlers>
文件中的Web.config
部分。