服务堆栈angularjs与ravendb,正确的方法

时间:2014-11-12 14:03:08

标签: c# .net angularjs servicestack

我创建了服务堆栈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.ServiceModelX.AngularJS 与ravendb数据库。

1 个答案:

答案 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.ServiceModelAngularJSWebApp1.ServiceInterface的依赖关系。后者需要在前者中定义的类的实例,以便对请求对象执行操作。 AngularJSWebApp1.ServiceModelAngularJSWebApp1.ServiceInterface都是AngularJSWebApp1的依赖关系。由于这是唯一的ASP.NET项目,因此它用于托管AngularJS应用程序和ServiceStack Web服务。请注意<httpHandlers>文件中的Web.config部分。