标签: servicestack

Doxygen并将一个属性值添加到输出文档中

ServiceStack使用c#属性标记Web服务的休息路径.

例如

[RestService("/hello1")]
[RestService("/hello2")]
public class Hello
Run Code Online (Sandbox Code Playgroud)

我想在Hello类的doxygen输出中使Doxygen包含RestService属性的值.如果带有括号的完整行包含在输出文档中,我并不太关心漂亮的formattin.

有什么建议?

一个快速而肮脏的技巧比编写Doxygen扩展更好;)

干杯

Tymek

====编辑

doxygen用户答案的Python版本(因此可以在Windows上轻松工作)将是:

#!/usr/bin/env python
import sys
import re

if (len(sys.argv) < 2):
    print "No input file"
else:
    f = open(sys.argv[1])
    line = f.readline()
    while line:
        re1 = re.compile("\[RestService\(\"(.*)\",.*\"(.*)\"\)]")
        re1.search(line)
        sys.stdout.write(re1.sub(r"/** \\b RestService: \2 \1\\n */\n", line))
        #sys.stdout.write(line)
        line = f.readline()
    f.close()
Run Code Online (Sandbox Code Playgroud)

并且DOXYFILE将具有:

INPUT_FILTER           = "doxygenFilter.py"
Run Code Online (Sandbox Code Playgroud)

c# documentation doxygen servicestack

8
推荐指数
1
解决办法
1460
查看次数

如何在查询字符串中传递复杂类型列表?

如何在ServiceStack中传递复杂类型列表?例如,我的Request DTO看起来像这样:

//Request DTO
public class Test
{
    public IList<Fund> Funds { get; set; }
}

public class Fund
{
    public string Key { get; set; }
    public int Percent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何通过HTTP get传递序列化对象?

http://localhost:49490/api/funds={ ?? }
Run Code Online (Sandbox Code Playgroud)

KeyValueDataContractDeserializer:转换为类型时出错:类型定义应以"{"开头,期待序列化类型"基金",字符串以:asdf开头

servicestack

8
推荐指数
1
解决办法
5024
查看次数

ServiceStack.OrmLite中的ntext

我怎样才能在ServiceStack.OrmLite代码中首先使用nText数据类型?

public class Email
{
    [AutoIncrement]
    public long ID { get; set; }


    public DateTime Date { get; set; }

    public string From { get; set; }

    public string Subject { get; set; } 

    nText =>
    public string Body { get; set; } 

}
Run Code Online (Sandbox Code Playgroud)

如果我使用字符串数据类型,ormlite在数据库中生成nVarchar(8000)

我需要超过8000个字符的数据

c# sql-server code-first servicestack ormlite-servicestack

8
推荐指数
1
解决办法
1890
查看次数

跨平台ServiceStack身份验证

构建以下身份验证解决方案的最佳方法是什么?

我有一个独立的(没有与MVC集成)ServiceStack REST服务层.此服务是我所有数据的入口点.客户端上没有数据存储.

我有多个客户端(ASP.Net MVC 4站点,MonoTouch应用程序,MonoDroid应用程序,Silverlight应用程序,MonoMac应用程序等).

我想在服务级别提供身份验证(Facebook,Twitter等),包括将用户存储在MongoDBAuthRepository中,但允许客户端提供登录UI(我想要这个吗?).例如,对于MVC站点,我想将远程ServiceStack身份验证服务(包括Facebook,Twitter)与MVC的身份验证系统集成.似乎应该在服务端进行实际身份验证,但客户端需要保持身份验证响应.

我已经阅读了wiki,查看了SocialBootstrap,并阅读了论坛,但我仍然对这应该如何以分布式方式工作感到困惑.

authentication servicestack

8
推荐指数
1
解决办法
1159
查看次数

我应该在Service Stack服务模型中使用什么命名约定?

我们正考虑在下一个项目中使用ServiceStack; 在看示例时,我注意到,没有通用的命名约定. 例如:

entity:电影
请求:电影
回复:MovieResponse

所有操作都是如此. 现在这个例子:

实体:答案
请求:答案
响应:AnswerResult

完后还有:

实体:用户?
请求:GetUsers
响应:GetUsersResponse

(看到用动词盯着的班级名字有点奇怪)

所以,你可能想出了一些聪明的命名约定并希望分享.此外,服务堆栈上是否有更大的开源项目,我可以看看他们如何组织他们的服务模型?

c# servicestack

8
推荐指数
2
解决办法
1651
查看次数

较新的ServiceStack使用New Relic报告错误

我们最新的一些Web服务应用程序一直在使用较新的3.9.x版本的ServiceStack,我们即将更新一个旧的应用程序从v3.5.x更新到使用3.9.44.0.3.5.x版本与New Relic的报道相当不错,但我们用3.9.x报道的版本到目前为止报道了New Relic.有时它报告流量低,但有时它只是平坦的.

我们有一个带有New Relic的开放票据,并被告知他们挂钩进入System.Web.HttpApplication.BeginRequest(),并且没有已知的时间表,可以在DotNet服务中针对任何可能的问题对ServiceStack支持进行任何更改.

所以我们很好奇ServiceStack中是否有任何更改会因任何原因绕过此挂钩?

或者让其他人使用New Relic,体验过这一点并找到了没有New Relic参与的解决方案?

servicestack newrelic

8
推荐指数
1
解决办法
631
查看次数

扩展服务堆栈身份验证 - 使用自定义用户身份验证元数据填充用户会话

我正在尝试扩展Service Stack的身份验证和注册功能.我的身份验证和注册工作正常,但我需要为每个用户添加一些自定义数据.从Service Stack的文档和我发现的其他各种帖子中,您可以使用UserAuth表中内置的MetaData列添加自己的数据.

我创建了一个CustomAuthRepository,所以我可以设置UserAuth的元数据属性,这是我的自定义仓库:

public class CustomAuthRepository : OrmLiteAuthRepository, IUserAuthRepository
{
    public UserAuth CreateUserAuth(UserAuth newUser, string password)
    {
        newUser.Set(new LoginInfo
        {
            IsActive = false,
            PasswordNeedsReset = true
        });
        return base.CreateUserAuth(newUser, password);
    }
}
Run Code Online (Sandbox Code Playgroud)

这对于设置元数据非常有用,我最终在UserAuth表的元数据列中使用了LoginInfo对象的序列化版本.

现在我要做的是当用户进行身份验证时,我需要根据某些元数据更改AuthResponse.例如,如果用户尚未激活,我想返回带有属性的AuthResponseIsActive = get value from custom meta data

如果我可以将自定义元数据导入AuthSession,我想我可以这样做.在我的自定义凭证auth提供程序中,我可以根据AuthSession中的内容更改响应对象:

public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
    public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
    {
        var customUserAuthSession = (CustomUserAuthSession)session;

        if (!customUserAuthSession.LoginInfo.IsActive)
        {
            return new
            {
                UserName = customUserAuthSession.UserName,
                IsActive = customUserAuthSession.LoginInfo.IsActive
            };
        }

        var isAuthenticated …
Run Code Online (Sandbox Code Playgroud)

servicestack

8
推荐指数
1
解决办法
3239
查看次数

Servicestack CorsFeature全局选项处理程序不在某些路由上触发;

我有使用CorsFeature服务的设置,以及正在使用的文件APPHOST使用的函数收集到mythz在其他的答案提出的办法,:

private void ConfigureCors(Funq.Container container)
{
    Plugins.Add(new CorsFeature(allowedOrigins: "*",
                                allowedMethods: "GET, POST, PUT, DELETE, OPTIONS",
                                allowedHeaders: "Content-Type, Authorization, Accept",
                                allowCredentials: true));

    PreRequestFilters.Add((httpReq, httpRes) =>
    {
        //Handles Request and closes Responses after emitting global HTTP Headers
        if (httpReq.HttpMethod == "OPTIONS")
        {
            httpRes.EndRequest();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,预请求过滤器仅针对某些服务请求触发.我们在服务中拥有的一个基本实体是一个问题实体,并且定义的自定义路由如下:

[Route("/question")]
[Route("/question/{ReviewQuestionId}", "GET,DELETE")]
[Route("/question/{ReviewQuestionId}/{ReviewSectionId}", "GET")]
Run Code Online (Sandbox Code Playgroud)

使用POSTMAN触发测试查询(全部使用OPTIONS动词),我们可以看到这将触发预请求过滤器:

http://localhost/myservice/api/question/
Run Code Online (Sandbox Code Playgroud)

但这不会:

http://localhost/myservice/api/question/66
Run Code Online (Sandbox Code Playgroud)

据推测,这是因为第二和第三条路线明确定义了它们接受的动词,OPTIONS不是其中之一.

是否真的有必要在限制所支持的动词的每个定义路线中拼出OPTIONS?

servicestack

8
推荐指数
1
解决办法
1188
查看次数

检查SignalR属性中的授权

我在ServiceStack上有一些服务,并在这个项目中使用SignalR.

现在,我想保护集线器连接(仅对经过身份验证的用户进行访问),但我使用ServiceStack框架身份验证..(不是asp.net身份验证)和ServiceStack的会话(写入AuthUserId ih此会话和身份验证标志).

因此,当用户尝试连接到集线器时 - 集线器必须检查身份验证...

(是的,我可以从Hub请求Cookie(例如,方法OnConnected),但是在Authorize Attribute中检查身份验证 - 我必须在此类中进行(不在集线器中)

(http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization)

所以,我创建了课程

[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public class AuthorizeMyAttribute : AuthorizeAttribute
{
   protected override bool UserAuthorized(System.Security.Principal.IPrincipal user)
   {
     //... how can i request Cookies? / or may be can access for ServiceStack session...
     //    and return true or false
   }
}
Run Code Online (Sandbox Code Playgroud)

我能做些什么?谢谢!

c# asp.net authorize servicestack signalr

8
推荐指数
1
解决办法
8730
查看次数

ServiceStack Ormlite:System.InvalidProgramException JIT编译器遇到内部限制

嗨,我正在使用Ormlite运行ServiceStack,我遇到了这个错误.以前它工作正常.我不确定我所改变的是什么导致了这个错误.我刚刚使用了一个简单的db.Select()调用,它会抛出此错误.我尝试了各种方法,比如更新nuget包,清理和重建项目等,但它们都不起作用.

System.InvalidProgramException was caught
  _HResult=-2146233030
  _message=JIT Compiler encountered an internal limitation.
  HResult=-2146233030
  IsTransient=false
  Message=JIT Compiler encountered an internal limitation.
  Source=ServiceStack.OrmLite
  StackTrace:
       at ServiceStack.OrmLite.OrmLiteConfig.get_ExecFilter()
       at ServiceStack.OrmLite.ReadConnectionExtensions.Exec[T](IDbConnection dbConn, Func`2 filter)
       at ServiceStack.OrmLite.ReadConnectionExtensions.Select[T](IDbConnection dbConn, Expression`1 predicate)
   InnerException: 
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议可能出错的地方?

c# servicestack .net-4.5 ormlite-servicestack

8
推荐指数
1
解决办法
1747
查看次数