public class User
{
public long Id {get;set;}
[References(typeof(City))]
public long CityId {get;set;}
[????]
public City {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用ServiceStack.OrmLite.我正在使用ReferenceKey(CityId)和Reference(City).ReferenceKey用于创建Db,Reference用于在我的代码中使用对象.
我想记录servicestack webservice的整个请求和响应对.我查看了响应文件管理器,但是公开的流是只读的.
我像这样覆盖了CredentialsAuthProvider:
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
//TODO: Auth the user and return if valid login
return true;
}
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
//User has been authenticated
//Find the user's role form the DB
if (roleA)
//GOTO mypage1
if (roleB)
//GOTO mypage2
}
Run Code Online (Sandbox Code Playgroud)
我对〜/ auth/Credentials执行一个简单的帖子,当身份验证工作并调用OnAuthenticated方法时,如何根据角色或类似的东西将用户重定向到适当的页面?
我厌倦了在OnAuthenticated方法中执行以下操作,但它没有达到预期的效果:
authService( "/视图/客户").
使用入门模板更新(请参阅下面的评论):
public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string …Run Code Online (Sandbox Code Playgroud) 该ServiceStack文档都充满了关于如何使用示例服务器端实现用户的认证.但是如何在客户端设置用户凭据?
我使用ServiceStack来使用这样的JSON REST服务:
var restClient = new JsonServiceClient (baseUri);
var response = restClient.Get<MyResponse> ("/some/service");
Run Code Online (Sandbox Code Playgroud)
如何在请求中添加任何形式的身份验证?我想要使用的Web服务使用OAuth 1.0,但我也有兴趣添加自定义身份验证.
在我的代码中,我之前已经成功执行了OAuth令牌交换,因此我已经拥有了一个有效的访问令牌,并且现在需要使用此访问令牌及其来签署每个REST请求token_secret.
我对ServiceStack有疑问.为什么有空的请求类,为什么我们必须有一个请求类?例如:
[Route("/test", "GET")]
public class Test
{
}
public class TestResponse
{
public string Date { get; set; }
}
public class TestService : Service
{
public object Get(Test test)
{
return new TestResponse { Date = DateTime.Now.ToString() };
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没有通过我的请求传递对象,我的服务会失败吗?
然后我是我的Global.asax文件,我有:
public class AxDataAppHost : AppHostBase
{
public AxDataAppHost() :
base("AxData", typeof(TestService).Assembly)
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果我有超过1个服务的更多,在上面的例子中我使用的TestService,但如果我有什么一个Customers,Orders和Products?我该如何处理多项服务?
例如,如果我有标准的请求和响应DTO,通过链接IReturn<T>,具有如下所示的服务方法签名的原因是什么,如各种在线示例中所示(例如这一个,尽管并非始终如一):
public object Get(DTO.MyRequest request)
Run Code Online (Sandbox Code Playgroud)
而不是:
public IList<DTO.MyResponse> Get(DTO.MyRequest request)
Run Code Online (Sandbox Code Playgroud)
object这里的返回类型只是为了支持输出流的gzip压缩等服务功能,这会导致输出为字节数组吗?似乎人们希望从这些所谓的"动作"调用中获得适当的更强的返回类型,除非我遗漏了一些常见的场景或用例.
我使用ServiceStack的JsonServiceClient和Silverlight 5从我的ASP.Net服务器接收JSON数据.它适用于简短的JSON字符串,但是当涉及到非常大量的数据时,会抛出StackOverflowException ServiceStack.ServiceClient.Web.AsyncServiceClient.ReadCallBack<>.
所以我检查了GitHub上的最新源代码,并注意到数据是从块中以块状方式读取的,大小为4096字节.问题是这个方法读取一个块并告诉流完成后递归调用自身.我们收到的数据越多,发生的递归调用就越多.这就是当接收到的数据太大时应用程序崩溃的原因.
思路:
无论如何,在我下载所有源代码,自己修改和编译之前,我想听听你对此的看法.这是一个错误还是我错了?
我正在计划一个将由浏览器/ JavaScript和Android App使用的Web API(也向其他潜在客户开放).虽然我读到使用ServiceStack和WCF有很多好处,但我不确定它是否仍然是我们拥有ASP.NET WebAPI的更好选择.我发现这个问题是ServiceStack作者将它与WCF进行比较,但是说"WebApi与WCF的不同之处在于它鼓励REST-ful API设计."
那么,ServiceStack仍然是比ASP.NET WebAPI更好的选择,为什么呢?
另外,ServiceStack如何适应OWIN/Katana故事?
在使用ServiceStack 3.9.71.0编译项目时,我在visual studio中出现了以下警告(似乎也影响了最新版本).不知道为什么它之前没有显示,但是在我创建了一个引用我的主项目并且都引用了相同服务堆栈DLL的测试库后它已经开始显示:
警告2发现无法解析的同一依赖程序集的不同版本之间发生冲突.当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出.C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets 1635
检查构建日志显示:
10>"ServiceStack.Interfaces,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"和"ServiceStack.Interfaces,Version = 3.9.60.0,Culture = neutral,PublicKeyToken = null"之间存在冲突.10>"ServiceStack.Interfaces,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"被选中,因为它是主要的并且"ServiceStack.Interfaces,Version = 3.9.60.0,Culture = neutral,PublicKeyToken = null"不是.10>依赖于"ServiceStack.Interfaces,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"[C:\ proj\packages\ServiceStack.Common.3.9.71\lib \net35\ServiceStack.Interfaces.dll]的引用] ......
此错误是正确的,因为除了旧版本的ORMLite之外,NuGet中的最新版本似乎引用了旧版本的ServiceStack.Interfaces(http://i.imgur.com/4vw3069.jpg).我已从我的系统中删除了所有以前版本的ServiceStack,因此它不会拾取任何旧的DLL.我的项目只引用了ServiceStack,common,interfaces和text; 我删除了ORM,因为我没有使用它,但将它添加到两个项目都无济于事.
有点不确定我如何解决这个错误,因为Github似乎自3.9.60后没有更新,任何想法?
我正在探索使用ServiceStack作为WCF的替代方案.我的一个要求是服务器和客户端必须使用证书进行相互身份验证.客户端是一项服务,因此我无法使用涉及用户输入的任何类型的身份验证.此外,客户端需要能够使用单声道在Linux上运行,因此Windows身份验证已经完成.
我使用netsh.exe将服务器证书绑定到服务器端口,验证客户端是否获取服务器证书并使用wireshark加密数据.但是我不能为我的生活弄清楚如何配置服务器以要求客户端证书.
有些人建议使用请求过滤器来验证客户端证书,但这似乎非常低效,因为每个请求都会检查客户端证书.性能是非常重要的.创建自定义IAuthProvider似乎很有希望,但所有文档和示例都面向涉及用户交互的身份验证类型,而不是证书.
https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization
是否可以使用证书通过自托管ServiceStack服务相互验证客户端和服务器?
这是我的测试服务供参考.
public class Host : AppHostHttpListenerBase
{
public Host()
: base("Self-hosted thing", typeof(PutValueService).Assembly)
{
//TODO - add custom IAuthProvider to validate the client certificate?
this.RequestFilters.Add(ValidateRequest);
//add protobuf plugin
//https://github.com/ServiceStack/ServiceStack/wiki/Protobuf-format
Plugins.Add(new ProtoBufFormat());
//register protobuf
base.ContentTypeFilters.Register(ContentType.ProtoBuf,
(reqCtx, res, stream) => ProtoBuf.Serializer.NonGeneric.Serialize(stream, res),
ProtoBuf.Serializer.NonGeneric.Deserialize);
}
public override void Configure(Funq.Container container)
{}
void ValidateRequest(IHttpRequest request, IHttpResponse response, object dto)
{
//TODO - get client certificate?
}
}
[DataContract]
[Route("/putvalue", "POST")]
//dto
public class PutValueMessage : IReturnVoid
{
[DataMember(Order=1)]
public …Run Code Online (Sandbox Code Playgroud)