Edi*_*Edi 5 asp.net-mvc n-tier-architecture servicestack
在获得关于在我的asp.net MVC网站上使用ServiceStack的建议(在Asp.Net MVC网站上维护状态)之后,我开始在我的项目中实现它 - 但是有些东西对我来说仍然不清楚.
目前我有两个项目:一个是asp.net MVC项目,另一个是BL项目(一个包含所有业务逻辑的类库).MVC项目中的所有控制器都调用BL项目中的类/函数.
目前,mvc项目加载BL的DLL,但是在将来网站增长时,BL的项目将在不同的机器上运行.
我想使用ServiceStack进行会话管理/缓存和身份验证(这两者通常都相互依赖).
我的问题:
1)是否有可能只使用这两个功能而没有基于消息的Web服务的功能?需要初始化ServiceStack,并且在初始化两次时(在两个项目中)都会抛出错误.
2)是否可以在两个项目之间拆分ServiceStack的实现?我想使用ServiceStack的身份验证提供程序在BL项目中维护身份验证过程,但是我自己(或在ServiceStack的帮助下)在mvc项目中处理所有UI/cookie.
3)我想在BL项目中使用ServiceStack的缓存,但我想我仍然需要维护一些会话cookie来接收会话ID.做正确的方法是什么?是否有用于此目的的内置辅助函数?
提前致谢!
1)如果没有基于消息的Web服务的功能,是否可以仅使用这两个功能?需要初始化ServiceStack,并且在初始化两次时(在两个项目中)都会抛出错误.
如果您安装最新的ServiceStack.Mvc NuGet包,您将获得基本ServiceStackController,它是一个MVC控制器,可以方便地访问ServiceStack的内置提供程序.虽然您仍需要使用所需的依赖项自动连接控制器,例如注入ICacheClient.
虽然即使您没有使用ServiceStack的WebFramework,但拥有AppHost是一个方便的注册依赖项的地方.ServiceStack由Web.config中指定的ASP.NET的IHttpHandler映射触发,因此如果您没有指定任何映射,则永远不能在外部调用ServiceStack,但仍可以使用以下内容访问已注册的依赖项:
var cache = AppHost.Resolve<ICacheClient>(); //Get ICacheClient for SS IOC
Run Code Online (Sandbox Code Playgroud)
2)是否可以在两个项目之间拆分ServiceStack的实现?
如果您有AppHost,则在主机项目中不能有多个实例(按设计),因为AppHost应该类似于主机项目,其中应注册所有服务依赖项并配置适用于整个Web应用程序的设置或服务.
但是,您可以跨多个程序集拆分服务的实现,并让ServiceStack通过在AppHostBase构造函数中指定它们来扫描它们,例如:
public class AppHost : AppHostBase
{
public AppHost() : base("My Service",
typeof(AServiceInDll1).Assembly, typeof(AServiceInDll2).Assembly/*, etc.*/){}
}
Run Code Online (Sandbox Code Playgroud)
2)续 我想使用ServiceStack的身份验证提供程序在BL项目中维护身份验证过程,但是我自己(或在ServiceStack的帮助下)在mvc项目中处理所有UI/cookie.
查看ServiceStack.UseCases CustomAuthenticationMvc示例项目,以获取使用MVC但使用ServiceStack进行身份验证的示例.
3)我想在BL项目中使用ServiceStack的缓存,但我想我仍然需要维护一些会话cookie来接收会话ID.做正确的方法是什么?是否有用于此目的的内置辅助函数?
您可以像使用任何其他C#类一样使用任何ServiceStack的缓存提供程序,即将您的业务逻辑绑定到ICacheClient您的IOC并在IOC中注入具体实现.
对于会话,您可以使用base.SessionAs<T>ServiceStack.Mvc ServiceStackController中的方法来访问会话.要保存会话,您可以使用IHttpRequest.SaveSession()扩展方法.虽然这两种方法都需要ASP.NET上下文(它使用ASP.NET的HttpContext单例,如果没有提供),因为它依赖于ServiceStack的ss-id/ss-pidcookie,无论何时访问Session,都会自动指示将其添加到客户端(由服务器) .
如果您不希望业务逻辑服务依赖于ASP.NET,System.Web我建议访问并保存要在控制器中完成的会话并将其传递给业务逻辑.
我建议阅读Sessions Wiki页面,了解有关ServiceStack会话如何工作的更多背景信息.
我将添加此信息,因为它对于在ServiceStack和ASP.NET或MVC之间进行高级集成的任何人都很有用,因为一些ServiceStack的扩展方法依赖于这些内置类型.
您可以使用以下命令创建ServiceStack IHttpRequest或IHttpResponse(在任何HTTP/Controller请求中):
var ssHttpRequest = System.Web.HttpContext.Current.Request.ToRequest();
var ssHttpResponse = System.Web.HttpContext.Current.Response.ToResponse();
Run Code Online (Sandbox Code Playgroud)
最后,您可以创建一个完整的请求上下文(包含IHttpRequest和IHttpResponse):
var ssRequestContext = System.Web.HttpContext.Current.ToRequestContext();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |