我有以下服务
public class AppService : AsyncServiceBase<EvaluateStock>
{
public IBus Bus { get; set; }
public override object ExecuteAsync(EvaluateStock request)
{
// this will block the incoming http request
// unitl task is completed
// long computation
// Bus.Publish(result)
}
}
Run Code Online (Sandbox Code Playgroud)
它被不同的消费者跟随
POST
http://srv1/app/json/asynconeway/EvaluateStock
Run Code Online (Sandbox Code Playgroud)
使用asynconeway我假设它将允许我实现火灾并忘记WCF与IsOneWay一起使用.但似乎并非如此.
我错过了什么吗?
是否可以获取servicestack.text来生成格式化/缩进的json?
我希望它将json写入文本文件.如果它已经很好地格式化将是很好的.
我想使用我的API网站进行用户身份验证和授权,理想情况下我的UI网站纯粹是静态内容(html,js,css).我已经配置了ServiceStack的OAuth和OpenId(以及凭据/基本)提供程序,因此他们回答了api.mysite.com/auth/{provider}请求
我希望能够让www.mysite.com的用户能够通过ajax进行身份验证,然后调用API站点.
该BootstrapApi示例项目 -虽然非常有用-演示了API和网站上的同一个域中运行.
我想知道如果不是代码的所有部分都是异步的,那么使用异步http请求会带来多少好处.
让我们考虑一下场景:1)异步http请求阻塞同步数据库调用,以及2)同步等待异步数据库调用的http请求.
1)Web Api支持异步操作方法,但是如果我在处理请求时执行同步数据库调用,那么线程会阻塞调用,而且我不会从async可以给我或更好的线程经济中获益吗?
2)如果我有等待异步数据库调用的同步ServiceStack服务调用,那么会发生什么?我假设一个线程被保留用于处理整个同步http请求,当这个线程等待异步调用时,它仍然保留给Web请求或者什么?
基本上我的问题可归结为:如果不是所有IO调用都是异步的话,有没有理由使用异步?
我正在实现一个概念验证站点,可以选择与外部提供商链接.外部提供程序将用于获取一些其他用户数据.提供者方便地使用OAuth 1.0a公开身份验证.
要获取数据,用户在提供程序站点上进行身份验证并授予权限.简单.
该站点使用ServiceStack.用户使用注册和登录CredentialsAuthProvider.我查看了ServiceStack上的文档,探讨了SocialBoostrapApi演示,并相应地建模了我的服务;
首先,我添加了一个User类,它将序列化到我的数据库,以保存其他数据.
然后,我创建了一个CustomUserSession来覆盖该OnAuthenticated方法.
Plugins.Add(new AuthFeature(() => new CustomUserSession(), new IAuthProvider[] {
new CredentialsAuthProvider()
}));
Run Code Online (Sandbox Code Playgroud)
我的OnAuthenticated方法与SocialBoostrapApi演示中的方法非常相似; 它遍历session.ProviderOAuthAccess并从中获取必要的信息(寻找"ExternalProvider"提供者的OAuthTokens).
当然,这意味着当用户在外部提供商处授予我的应用程序授权时,在OAuth回调中,我会获得accessstoken,secret,everything,并将其放入其中session.ProviderOAuthAccess.
当然,这适用于当前会话,但如果用户再次注销,则必须再次授权(获取新的访问令牌).
我需要一些方法将我在会话中输入的数据保存到数据库中; 我试着环顾四周但却一无所获(另见我的问题).
所以,我添加了代码将它们直接保存到DB:
var userOAuthProvider = oauthTokens.TranslateTo<UserOAuthProvider>();
userOAuthProvider.UserAuthId = user.Id;
this.TryResolve<IDbConnectionFactory>().Run(db => db.Save(userOAuthProvider));
Run Code Online (Sandbox Code Playgroud)
现在,当用户进行身份验证时,似乎ServiceStack获取此UserAuthId的所有令牌并将其置于会话中.好!
我是以正确的方式做的吗?
我可以摆脱User/ CustomUserSessionclasses,只需将我需要的其他信息存储在UserOAuthProvider/ 中的"Items"字典中OAuthTokens吗?这会让我的代码更简单..
最后OnAuthenticate,SocialBootstrapApi再次保存自定义用户表:
authService.TryResolve<IDbConnectionFactory>().Run(db => db.Save(user));
Run Code Online (Sandbox Code Playgroud)
为什么有必要?我想是从UserOAuthProviderUser表上的表中复制一些信息(例如,在新授权后的下次登录时),但为什么呢?该会话似乎已使用正确的数据初始化.
我的服务器上的ServiceStack内置了/ auth/facebook和/ auth/twitter的端点......但是这些只在你使用浏览器时才有用吗?...对于应用程序呢?
我有一个iOS应用程序,利用ACAccountStore对象中内置的Facebook和Twitter帐户.有了这些对象,我最终能够调用SLRequest.GetPreparedUrlRequest ...从这里我可以提取以下内容:
Facebook :(来自请求网址)access_token
Twitter :(来自请求标题)oauth_nonce,oauth_signature_method,oauth_timestamp,oauth_consumer_key,oauth_token,oauth_signature和oauth_version
我能以某种方式使用auth/facebook或auth/twitter登录,甚至可能注册具有内置功能的帐户吗?在我看来,这些端点是针对浏览器的.是否有其他方法可以做到这一点...或者我应该编写自己的端点来验证利用(例如在Facebook中)access_token并直接从Facebook图表获取服务器上的用户信息?
我有一个服务堆栈服务,我们将调用Orders具有标准GET路由
/orders - 获取所有客户/orders/{Ids} - 获取特定客户这一切都很好,花花公子,但我想我会添加另一条路线
/orders/customers/{CustomerId} - 获取具有特定客户ID的订单这可以在浏览器中找到路由时找到,但是当我使用ServiceStack Client时,我得到了不明确的路由异常,并列出了三条路由.
我不太确定最好的解决方法是什么..我正在做的不是正确的REST方式吗?
我知道我可以简单地手动输入路线之JsonServiceClient类的
client.Get<List<Orders>>("/orders/customers/7")
这将有效,但我更愿意采用打字的方式...即
client.Get(new OrdersRequest { CustomerId = 7 });
这是我正在使用的RequestDTO示例
public class OrdersRequest : IReturn<List<Orders>>
{
public int[] Ids {get; set;}
public CustomerId {get; set;}
public OrdersRequest(params int[] ids)
{
this.Ids = ids;
}
}
Run Code Online (Sandbox Code Playgroud)
我是否必须为此使用不同的Dt或......?
任何有关此方法的示例的任何帮助或指针,或者更好的方式来创建服务将是值得赞赏的.
谢谢
我正在学习ServiceStack剃须刀并且想要用它来改进(一般来说是ServiceStack),虽然我无法通过继承指令获得intellisense(通过继承指令)

这是我到目前为止的尝试:http://www.ienablemuch.com/2012/12/self-hosting-servicestack-serving.html
我正在构建移动应用程序和ServiceStack Web服务后端.ServiceStack中的身份验证功能看起来很棒但很容易迷失其灵活性 - 非常感谢指导.我将使用自己的数据库表来存储Web服务中的用户等.我想要一个注册过程和后续身份验证,如下所示:
然后,后续Web服务请求将提供设备ID和身份验证令牌(或使用它创建的哈希).该应用程序不是很健谈,所以我很想在每个Web请求上发送身份验证详细信息.
问题1:我应该挂钩ServiceStack的注册API还是只添加几个自定义Web服务调用?例如,如果不使用ServiceStack的注册,我会:
但感觉我应该使用ServiceStack内置的注册.
问题2:每次请求传递身份验证详细信息有什么问题?这样可以更轻松地编写我的应用程序请求,但根据ServiceStack示例,它似乎没有"完成".大概是因为如果你有很多请求需要重新验证每个电话 - 其他任何原因,它效率低下?我的应用程序最多只会每隔几分钟发出一次Web请求,因此避免使用会话并重新授权每个请求似乎更简单.
问题3:我是否在正确的轨道上继承CredentialsAuthProvider?
问题4:是否有任何一点使用auth令牌生成哈希而不是每次都发送身份验证令牌?所有通信都将通过https进行.
我在ServiceStack中使用身份验证功能,并将Auth插件配置为使用CredentialsAuthProvider.在生成的元数据页面上,ServiceStack显示以下操作:
我只使用Auth操作,为什么我想删除角色操作以避免本页的读者对如何使用API感到困惑.这可能吗?
servicestack ×10
c# ×2
oauth ×2
ajax ×1
asynchronous ×1
facebook ×1
ios ×1
razor ×1
rest ×1
routes ×1
twitter ×1
web-services ×1