Tag: servicestack

ServiceStack路由设计

这3条路线是否相同? 通常首选哪一个? [Route(“/todo/{id}”, “DELETE”)] [Route(“/todo/delete”,”POST”)] [Route(“/todo/delete/{id}”,”GET”)] public class DeleteTodo : IReturnVoid { public int Id { get; set; } } 非常感谢你…

将大消息发送到ServiceStack服务

我需要创建一个服务,允许客户端发送包含大量数据的消息,我不知道如何构建API。 假设客户端想要保存包含可变数量的相关对象的新对象。 例如,Order,包含OrderDetail对象中包含的多个订单项。 一个Order可能有超过1000个与它相关的OrderDetail对象,每个对象可能包含20-40KB的数据。 客户需要知道服务已收到整个订单。 我想探索使用ServiceStack来创建它。 创建高流量服务并不是我非常熟悉的。 我们通常会使用WCF,似乎人们只是建议增加邮件大小限制以容纳大量邮件。 我不确定这是否是WCF的最佳策略,更不用说ServiceStack了。 将每个OrderDetail作为自己的消息发送会更好吗? 我会担心保持整个秩序的完整性走这条路。 或者我应该将此作为单个大型消息保留20-40MB的数据? 或者我应该尝试将其作为文件流式传输?

通过ServiceStack加密消息

给定一个应用程序,需要为来自oAuth的ConsumerKey / ConsumerSecret交换信息 – server running “WebApi” over ServiceStack – consumer is a desktop app 希望使用已经存在的公钥/私钥加密消息 是否有任何支持加密/解密消息,希望透明? 即加密/解密是通过服务器上的filter来处理的吗? 要么 有关如何执行此操作的任何解决方法? 仅供参考 – 服务器已经要求SSL并且请求已经过身份validation,但注册是免费/自动的,因此需要加密

PubSub如何在BookSleeve / Redis中工作?

我想知道使用BookSleeve发布和订阅频道的最佳方式是什么。 我目前实现了几种静态方法(见下文),它允许我将内容发布到特定通道,新创建的通道存储在private static Dictionary subscribedChannels; 。 这是正确的方法,因为我想发布到频道并订阅同一个应用程序中的频道(注意:我的包装器是一个静态类)。 即使我想发布和订阅,创建一个频道是否足够? 显然,我不会发布到在同一个应用程序中订阅的相同频道。 但我测试了它,它工作: RedisClient.SubscribeToChannel(“Test”).Wait(); RedisClient.Publish(“Test”, “Test Message”); 它工作。 在这里我的问题: 1)设置专用发布频道和专用订阅频道而不是为两者使用一个频道是否更有效? 2)语义上“channel”和“PatternSubscription”有什么区别? 我的理解是我可以在同一个频道上通过PatternSubscription()订阅几个“主题”,对吗? 但是如果我想为每个“主题”调用不同的回调,我必须为每个主题设置一个正确的通道吗? 这样有效吗?或者你会建议反对吗? 这里是代码片段。 谢谢!!! public static Task Publish(string channel, byte[] message) { return connection.Publish(channel, message); } public static Task SubscribeToChannel(string channelName) { string subscriptionString = ChannelSubscriptionString(channelName); RedisSubscriberConnection channel = connection.GetOpenSubscriberChannel(); subscribedChannels[subscriptionString] = channel; return channel.PatternSubscribe(subscriptionString, OnSubscribedChannelMessage); […]

ServiceStack Selfhosted应用程序重新启动

如何重新启动ServiceStack自托管Apphost? 将我的AppHost实例设置为null并处理它无法正常工作,它会抛出以下exception: System.ArgumentException: An entry with the same key already exists. 我需要能够重新加载设置并启动AppHost,而无需重新启动托管AppHost的Windows服务 编辑:Scott和Moo-Juice建议在不同的AppDomain中运行AppHost是正确的解决方案。 为了通过Cross Domain调用来重新启动AppHost,我创建了第二个AppHost,它在Main AppDomain中运行,并从Scott的解决方案中调用Restart方法。 在两个AppHost实例上启用CORS允许简单的$ ajax调用来重新启动服务,并在服务启动并返回请求后重新加载页面。

使用现有数据库的ServiceStack身份validation

我一直在关注ServiceStack,我正在尝试了解如何在具有现有数据库的服务上使用BasicAuthentication。 我想生成一个公钥(用户名)和密钥(密码),并将其放在现有的用户记录中。 然后,用户将其与请求一起传递给ServiceStack端点。 我需要在ServiceStack堆栈中实现什么才能使其正常工作? 我查看了IUserAuthRepository和CredentialsAuthProvider基类,看起来我应该在现有数据库表之上实现IUserAuthRepository。 我也在试图弄清楚我应该实现什么才能使身份validation正常工作。 我不会使用该服务来添加或更新用户对服务的访问权限,而是使用单独的Web应用程序。 非常感谢任何帮助和过去的经验。

ServiceStack:如何处理错误?

到目前为止,我正在使用ServiceStack取得了很好的效果,除了处理错误似乎很棘手。 如果在序列化消息期间出现问题(因为我忘了在消息中添加默认构造函数),所有客户端都会返回一条消息,表明服务器有内部错误,状态代码为500.添加一个监听器Global.asax中的HttpApplication.Error事件不起作用,因为它永远不会被击中。 Application_Error也没有。 这不仅对最终用户场景不够,它使得调试这些错误非常麻烦,因为找出错误的唯一方法是快速监视中的这种丑陋表达: Encoding.Default.GetString( ((System.IO.MemoryStream)((SyncMemoryStream)((System.Net.HttpWebResponse)(((WebException)ex).Response)).ResponseStream))._buffer) 我想要的是捕获服务器端的任何和所有错误(无论是ServiceStack序列化,还是我的服务上的错误),并将所需信息添加到我所有消息类型都有的Errors集合中。

如何使ServiceStack身份validation工作? (使用iPhone客户端)

我们聘请了一位为我们编写iPhone应用程序的承包商,我开始用ServiceStack为它编写后端服务。 我一般都在努力获得授权:使用何种授权以及如何实施授权。 我对ServiceStack,HTTP和授权(我)了解不多。我读过这篇文章 ,但我可能还是做错了。 我将使用现有遗留数据库中的用户名和密码进行身份validation(但没有别的 – 没有注册新用户,没有不同的权限。只是进行身份validation)。 所以我需要编写自己的提供者。 我已经设法在本教程的帮助下实现了一个有效的CredentialsAuthProvider 。 它在我在浏览器中测试时有效: 致电我的服务并获得401 POST到auth/credentials 再次呼叫我的服务并获得正确的结果 但是,我注意到当我在Fiddler中尝试时,相同的工作流程不起作用。 POST到auth/credentials有效。 我发布这个: POST http://localhost:52690/auth/credentials?format=json HTTP/1.1 User-Agent: Fiddler Host: localhost:52690 Content-Length: 74 Content-Type: application/json; charset=utf-8 { “UserName”: “chspe”, “Password”: “xyz”, “RememberMe”: true } ……得到这个: HTTP/1.1 200 OK Server: ASP.NET Development Server/10.0.0.0 Date: Fri, 14 Jun 2013 13:07:35 GMT X-AspNet-Version: 4.0.30319 X-Powered-By: […]

ServiceStack请求和响应对象

是否可以(阅读良好实践)重复使用POCO进行请求和响应DTO。 我们的POCO是轻量级的(ORM Lite),只有属性和一些装饰属性。 或者,我应该为请求和/或响应创建其他对象吗? 谢谢,

ServiceStack – 使用gzip / deflate压缩和JSONP请求

我有一个ServiceStack服务,使用RequestContext.ToOptimizedResult()压缩响应,例如: [Route(“/numbers/search”)] public class FindNumbers { } public object Get(FindNumbers query) { var data = new List { “One”, “Two”, “Three” }; return RequestContext.ToOptimizedResult(data); } 这在发出如下请求时非常有效: GET http://myhost:13487/numbers/search.json 并使用Accept-Encoding请求标头按预期压缩: Accept-Encoding: gzip,deflate,sdch 我也可以发出JSONP请求: GET http://myhost:13487/numbers/search?callback=func 正确返回application/javascript回调(未压缩)。 问题 当我将Accept-Encoding请求标头添加到JSONP请求时,响应是根据原始JSON请求的压缩JSON数据,而不是压缩的application/javascript回调。 是否有任何明显的原因导致我对此行为缺失,或者它只是ServiceStack中的一个错误? 我的期望是在响应中接收压缩的JSONP回调,但我对JSONP相当绿色,并且可能有一个很好的理由进行回退。 请注意,我正在通过ServiceStack源进行工作,但我想我会在那里得到它,因为更多的大脑比一个更好… 提前致谢 编辑 所以,我已经从以下来源追踪了这个问题 https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/Handlers/GenericHandler.cs#L79 和 https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/RestHandler.cs#L107 if (doJsonp && !(response is CompressedResult)) return httpRes.WriteToResponse(httpReq, response, […]