我刚刚开始使用ServiceStack,作为测试用例,我希望重新编写使用标准ASP.Net处理程序构建的现有服务.我已经成功地将它全部工作,因为我想要它,但有某些方面利用ASP.Net Session对象.
我已经尝试将IRequiresSessionState添加到服务接口中:
public class SessionTestService : RestServiceBase<SessionTest>, IRequiresSessionState {
public override object OnPost(SessionTest request) {
// Here I want to use System.Web.HttpContext.Current.Session
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我似乎无法使其工作,因为Session对象始终为null.
我做了很多谷歌搜索,并对https://github.com/mythz/ServiceStack/blob/master/tests/ServiceStack.WebHost.IntegrationTests/Services/Secure.cs和类似问题感到困惑,但我找不到任何执行此操作的示例代码(令我感到惊讶).任何人都可以解释为什么以上不起作用,并建议我需要做什么才能使它工作?
注意:最终我可能希望用Redis替换它或者尝试删除任何服务器端会话要求,但我认为我暂时使用ASP.Net实现,以使工作正常并避免重新处理它在这一点上超过必要的.
ServiceStack如何处理并发调用?我在WCF中寻找相当于ConcurrencyMode.Multiple的东西.
我的WCF服务设置了此属性:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
Run Code Online (Sandbox Code Playgroud)
我是否需要在ServiceStack中启用任何内容以使其为每个调用使用多个线程?
ServiceStack服务中是否有任何机制可以返回流/大二进制数据?WCF的MTOM支持很难但在返回大量数据时却没有文本转换开销.
我只是想让服务堆栈在mvc4项目下运行.ServiceStack.Host.Mvcnuget包是否适用于mvc 4.0?我安装了它并将其添加routes.IgnoreRoute("api/{*pathInfo}");到路由配置中,但是当我去的时候它找不到路由
/api/metadata
我收到错误:
未找到与请求URI" http:// localhost:51681/api/metadata " 匹配的HTTP资源.
我正在尝试在我正在编写的SignalR应用程序中使用ServiceStack,它是大型MVC 4.5应用程序的一部分.
我目前在App_Start文件夹中有一个正在启动我的Hub的类.我的问题是如何获得对ServiceStack的wiki所示的容器的引用.
container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("localhost:6379"));
container.Register<ICacheClient>(c => (ICacheClient)c.Resolve<IRedisClientsManager>().GetCacheClient());
Run Code Online (Sandbox Code Playgroud)
我正在做的是使用Redis作为开发缓存层,并计划使用我们的exisitng membase作为生产缓存层.
我如何获得容器?
很长一段时间我们都在使用msmq和redis queue(IRedisList).几个月前,我们开始尝试redis pub-sub.
我们的应用程序有20多种服务,可以从队列中读取消息或使用redis订阅频道.我们还有十多个队列,我们向他们发送消息.该应用程序是多线程的.
那么我想要你什么?
现在我们有时间花在决定上面我们想要使用什么类型的队列以及我们想要用不同类型的队列替换什么.
我试图寻找有关MSMQ VS Redis的帖子,但没有找到足够的信息.
有人可以告诉我这个问题吗?
有没有人有成功将事务报告到NewRelic的ServiceStack Api的示例代码?
这似乎并不是微不足道的 - 它不是开箱即用的,添加一个RequestFilter调用NewRelic.Api.Agent.NewRelic.SetTransactionName不会改变它.
服务器和应用程序似乎配置正确 - 同一IIS服务器上的其他应用程序(ASP WebForms和ASP MVC)正确报告.我们正在使用IIS 7.5.每个应用程序都在自己的应用程序池中,并NewRelic.AppName在web.config中有一个
我正在寻求使用该IRequiresRequestStream接口来启用使用ServiceStack(v3)和分块传输编码的大文件上传(视频文件).标准文件上传似乎无法应对客户上传的一些较大的视频文件,因此我们希望为这些文件启用分块传输编码.
我已成功测试了分块传输编码文件上传,但还有许多参数需要与文件一起发送.
由于IRequiresRequestStream绕过了ServiceStack请求对象解析器,Stream因此显然没有填充请求对象中的任何其他参数.作为一种解决方法,我可以看到以下选项:
this.Request.QueryString集合访问this.Request.Headers集合访问RequestBinder?我已经设法实现了选项1和2,但不知何故感觉还不够RESTful.我更喜欢使用Path -> RequestDTO,但我正在努力RequestBinder.
服务:
public object Any(AttachmentStreamRequest request)
{
byte[] fileBytes = null;
using (var stream = new MemoryStream())
{
request.RequestStream.WriteTo(stream);
length = stream.Length;
fileBytes = stream.ToArray();
}
string filePath = @"D:\temp\test.dat";
File.WriteAllBytes(filePath, fileBytes);
var hash = CalculateMd5(filePath);
var requestHash = this.Request.QueryString["Hash"];
var customerId = this.Request.QueryString["CustomerId"];
var fileName = this.Request.QueryString["FileName"];
// nicer would be
// var requestHash = …Run Code Online (Sandbox Code Playgroud) 我在使用ServiceStack [Authentication]属性在ASP.Net MVC4控制器中工作时遇到问题,即使在正确提交登录详细信息之后,具有该属性的页面/操作方法也会将用户重定向到登录页面.
我遵循了SocialBootstrapApi示例,区别在于所有身份验证Web服务调用都是从控制器进行的:
this.CreateRestClient().Post<RegistrationResponse>("/register", model);
Run Code Online (Sandbox Code Playgroud)
到目前为止我做过的其他事情:
注册确实有效,用户身份验证逻辑工作(即使会话不存在),我可以在请求中看到ss-id和ss-pidcookie.
所以我的完整问题列表:
this.UserSession总是空的.this.CreateRestClient().Get<AuthResponse>("/auth/logout");似乎不起作用.更新1:在我提交任何凭据之前,当我尝试加载安全页面(具有[Authenticate]属性的页面)时,会创建
会话cookie(ss-id和ss-pid).这是预期的行为吗?
更新2:
我可以看到会话保存在MemoryCacheClient,但试图在主控制器通过检索它this.Cache.Get<CustomUserSession>(SessionKey)返回null(其中SessionKey是这样的:urn:iauthsession:1)
c# authentication forms-authentication servicestack asp.net-mvc-4
TL; DR:ServiceStack.Text中是否有内置方式来生成漂亮的JSON?
我正在使用ServiceStack.Text进行JSON序列化.到目前为止它确实很好用,但是创建的JSON(使用.ToJSON())没有用空格或换行符格式化(最有可能在通过网络发送时节省空间).但是,在某些情况下,将JSON格式化以便于人类阅读更好.
该.Dump ()方法执行某种格式化,但不会生成有效的JSON(即缺少周围的双引号).
servicestack ×10
c# ×5
.net ×3
asp.net ×2
asp.net-mvc ×1
json ×1
newrelic ×1
redis ×1
rest ×1
web-services ×1