标签: servicestack

这是ServiceStack Redis的有效用法吗?

我是Redis的新手(在托管服务中使用它),并希望将其用作列表的演示/沙箱数据存储.

我使用下面的代码.这个对我有用.但是对于一个拥有多个(最多100个)并发用户(对于少量数据 - 最多1000个列表项)的小型网站来说,这是一种有效(而非完全不好的做法)用法吗?

我正在使用静态连接和静态redisclient类型列表,如下所示:

public class MyApp
{   
    private static ServiceStack.Redis.RedisClient redisClient;

    public static IList<Person> Persons;
    public static IRedisTypedClient<Person> PersonClient;

    static MyApp()
    {
        redisClient = new RedisClient("nnn.redistogo.com", nnn) { Password = "nnn" };
        PersonClient = redisClient.GetTypedClient<Person>();
        Persons = PersonClient.Lists["urn:names:current"];
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做我有一个非常容易使用的持久数据列表,这正是我在构建/演示应用程序的基本块时所需要的.

foreach (var person in MyApp.Persons) ...
Run Code Online (Sandbox Code Playgroud)

添加新人:

MyApp.Persons.Add(new Person { Id = MyApp.PersonClient.GetNextSequence(), Name = "My Name" });
Run Code Online (Sandbox Code Playgroud)

我担心(目前)不是我在appstart上将完整列表加载到内存中的事实,而是我与redis主机的连接不遵循良好标准的可能性 - 或者是否存在其他问题我不是意识到.

谢谢

c# redis servicestack

11
推荐指数
1
解决办法
8213
查看次数

ServiceStack服务可以包含多种方法吗?

环境是Visual Studio 2012,ServiceStack,ASP.NET Web应用程序项目(关注https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice)

通过查看ServiceStack.Examples中的一些类,我注意到大多数服务只包含一个方法.有些覆盖Execute()或者,如果是REST服务,有些覆盖OnPost/Get/Put/Delete().

我应该如何看待做一个完整的API集,如果我有几我需要实现的功能RegisterUser(),RemoveUser(),AddFriend(),RemoveFriend()...每个方法的一个服务?

public RegisterUserService : IService<User> { public object Execute(User> dto) { ... } }
public RemoveUserService : IService<User> { public object Execute(User> dto) { ... } }
public AddFriendService : IService<Friend> { public object Execute(Friend dto) { ... } }
public RemoveFriendService: IService<RequestDTO4> { public object Execute(Friend dto) { ... } }
Run Code Online (Sandbox Code Playgroud)

我很失落如何开始实现完整的API集.我已经阅读了"创建您的第一个Web服务" 的第一个第二个 Wiki页面,我已经复制了该服务方法.但现在我想制作10或40种服务方法,我不知道该怎么做.

我注意到,实现from IRestService<T>允许你最多4个方法而不是一个 …

c# api rest soa servicestack

11
推荐指数
2
解决办法
7736
查看次数

使用ServiceStack.ORMLite实现工作单元和存储库模式的最佳实践

假设有两个存储库接口:

interface IFooRepository
{
    void Delete(int id);
}

interface IBarRepository
{
    void Delete(int id);
}
Run Code Online (Sandbox Code Playgroud)

和IUnitOfWork接口类似:

interface IUnitOfWork : IDisposable
{
    void Commit();
    void Rollback();
}
Run Code Online (Sandbox Code Playgroud)

使用ServiceStack.ORMLite实现这些接口的最佳实践是什么,以便用户可以像使用它们一样使用它们

MyFooRepository.Delete(4);
// if an Exception throws here, Bar won't be deleted
MyBarRepository.Delete(7);
Run Code Online (Sandbox Code Playgroud)

要么

using (var uow = CreateUnitOfWork())
{
    MyFooRepository.Delete(4);
    MyBarRepository.Delete(7);
    uow.Commit();  //now they are in an transaction
}
Run Code Online (Sandbox Code Playgroud)

repository-pattern servicestack ormlite-servicestack

11
推荐指数
1
解决办法
4916
查看次数

启动ServiceStack时无法加载类型'ServiceStack.ServiceHost.IService'

在AppHost上调用Init()时出现上述错误.

这是一个干净的asp.net v 4.5空Web应用程序,它带有一个简单的HelloWorld服务,根据入门教程.

我特意使用安装的旧版ServiceStack:

Install-Package ServiceStack -Version 3.9.71
Run Code Online (Sandbox Code Playgroud)

哪个安装引用:

ServiceStack.dll 3.9.70.0
ServiceStack.Common.dll 3.9.9.0
ServiceStack.Interfaces.dll 3.9.9.0
ServiceStack.OrmLite.dll 3.9.14.0
ServiceStack.OrmLite.SqlServer.dll 1.0.0.0
ServiceStack.Redis.dll 3.9.11.0
ServiceStack.ServiceInterface.dll 3.9.70.0
ServiceStack.Text.dll 4.0.11.0
Run Code Online (Sandbox Code Playgroud)

而我得到的错误是:

[TypeLoadException: Could not load type 'ServiceStack.ServiceHost.IService' from assembly 'ServiceStack.Interfaces, Version=3.9.9.0, Culture=neutral, PublicKeyToken=null'.]
   Falck.WebAPI.AppHost..ctor() in c:\inetpub\wwwroot\WebAPI\Falck.WebAPI\Global.asax.cs:17
   Falck.WebAPI.Global.Application_Start(Object sender, EventArgs e) in c:\inetpub\wwwroot\WebAPI\Falck.WebAPI\Global.asax.cs:29

[HttpException (0x80004005): Could not load type 'ServiceStack.ServiceHost.IService' from assembly 'ServiceStack.Interfaces, Version=3.9.9.0, Culture=neutral, PublicKeyToken=null'.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9865825
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext …
Run Code Online (Sandbox Code Playgroud)

asp.net servicestack servicestack-bsd

11
推荐指数
2
解决办法
5582
查看次数

这是Redis在ServiceStack REST API上的一个很好的用例吗?

我正在创建一个移动应用程序,它需要一个API服务后端来获取/放置每个用户的信息.我将在ServiceStack上开发Web服务,但对存储感到疑惑.我喜欢像Redis这样快速内存缓存系统的想法,但我有几个问题:

  1. 我创建了一个我的数据存储应该是什么样子的示例模式.这似乎是使用Redis而不是MySQL DB或类似的东西的好例子吗?

    schema http://www.miles3.com/uploads/redis.png

  2. 将Redis存储持久化到磁盘的设置有多难,或者在您对商店进行写入时是否内置?(我是这个NoSQL东西的新手)

  3. 我目前在AWS上使用Linux微实例进行设置(因为它可以免费使用一年).我知道这个答案有很多因素,但总的来说这对我的网络服务和Redis来说已经足够了吗?因为Redis在内存中就够了吗?我想如果我的移动应用程序飙升(嘿,我们可以做梦吧?)那么我将开始触及实例的天花板.

redis servicestack

10
推荐指数
1
解决办法
5758
查看次数

ServiceStack OrmLite Sql查询日志记录

根据Service Stack Ormlite文档.我应该在调试模式下生成sql查询.但是,我无法看到这些疑问.简单的代码

 private static readonly string DataDirLoc =
        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) +
        "\\TargetIntegration\\Test\\Debug\\";



    private readonly string dbFileName = DataDirLoc +
                                              "Test.db3";

    [Test]
    public void Can_Generate_log() {
        //var writer = new TextWriterTraceListener(System.Console.Out);
        //Debug.Listeners.Add(writer);
        Debug.Write("this is a try");
        var dbFact = new OrmLiteConnectionFactory("Data Source={0};Version=3;".FormatParams(dbFileName), true,
                                                  SqliteOrmLiteDialectProvider.Instance);
          IDbConnection dbConnection = dbFact.OpenDbConnection();
       var dbCommand = dbConnection.CreateCommand();
        dbCommand.CreateTable<Contact>();
    }
Run Code Online (Sandbox Code Playgroud)

c# servicestack ormlite-servicestack

10
推荐指数
1
解决办法
5699
查看次数

ServiceStack身份验证失败时,不重定向?

我们正在构建一个将使用基本身份验证的ServiceStack API.我目前在AppHost中设置了auth,如下所示:

var authDb = new OrmLiteConnectionFactory("Server=(...);", true, MySqlDialectProvider.Instance);

var authRepo = new OrmLiteAuthRepository(authDb);
authRepo.CreateMissingTables();
container.Register<ICacheClient>(c => new MemoryCacheClient());
container.Register<IUserAuthRepository>(c => authRepo);

Plugins.Add(
    new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] { new BasicAuthProvider() })
);
Run Code Online (Sandbox Code Playgroud)

当执行没有Authorization标头或错误用户名的请求时+传递响应是重定向到/Account/Login.aspx?ReturnUrl = ...

Parital request + response示例:

POST http://localhost:60278/reserve HTTP/1.1

HTTP/1.1 302 Found
Location: /Account/Login.aspx?ReturnUrl=%2freserve
X-Powered-By: ServiceStack/3,924 Win32NT/.NET
Run Code Online (Sandbox Code Playgroud)

有没有办法让它只响应HTTP 401 Unauthorized或HTTP 403 Forbidden?

.net authentication servicestack

10
推荐指数
1
解决办法
4131
查看次数

如何在ServiceStack中编写单元/集成测试

我对ServiceStack很新.到目前为止,我已经有幸获得了基本的API和工作(Northwind示例对我特别有帮助).但是,在尝试构建单元和集成测试时,我遇到了绊脚石.

我发现了另一个来自另一个ServiceStack用户的要点,他说明了一些(可能是不正确的)单元和集成测试的例子,但是我无法让那些工作.

这是我一直在使用的参考:https: //github.com/ServiceStack/ServiceStack/issues/435

这是我尝试基本的单元测试,主要使用来自其他用户的要点的借用代码:https: //gist.github.com/anonymous/4957788

当我尝试在HelloWorldTest中运行测试用例时,抛出System.NotImplementedException,声明"无法解析服务'HelloWorldName'".

这让我很困惑,因为我传递了一个请求DTO,而不是一个服务,这似乎与我正在调用的ExecuteService()方法一致.但是,例外情况表明ServiceStack将我的DTO视为一种服务.

有人可能会给我一个很好的,规范的例子,说明如何正确编写ServiceStack的单元和集成测试?我应该提一下,我也是.NET开发的新手,所以也许我的无知正在闪耀.

非常感谢.

unit-testing servicestack

10
推荐指数
1
解决办法
2920
查看次数

如何在ServiceStack中使用Dapper

目前,我正在使用OrmLite进行数据库操作.我也打算使用Dapper ORM,但任何人都可以指出我如何在ServiceStack中集成DapperORM.我是否需要将Dapper和插件的IDbConnection和IDbConnectionFactory接口实现到容器中.

  public override void Configure(Container container) {
        container.Register<IDbConnectionFactory>(
          c => new OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["default"].ConnectionString,
                                            SqlServerDialect.Provider));

        container.Register<IDbConnection>(c => c.Resolve<IDbConnectionFactory>().OpenDbConnection()).ReusedWithin(ReuseScope.Request);

      }
Run Code Online (Sandbox Code Playgroud)

servicestack dapper ormlite-servicestack

10
推荐指数
2
解决办法
2483
查看次数

F#是否了解其受歧视的工会的编制表格?

F#中的区分联合被编译为抽象类,其选项成为嵌套的具体类.

type DU = A | B
Run Code Online (Sandbox Code Playgroud)

DU是抽象的,而DU.A和DU.B是具体的.

使用ServiceStack,可以使用函数自定义类型到JSON字符串和后面的序列化.关于DU类型,这是我在C#中如何做到的.

using ServiceStack.Text;

JsConfig<DU.A>.SerializeFn = v => "A"; // Func<DU.A, String>
JsConfig<DU.B>.SerializeFn = v => "B"; // Func<DU.B, String>
JsConfig<DU>.DeserializeFn = s =>
    if s == "A" then DU.NewA() else DU.NewB(); // Func<String, DU>
Run Code Online (Sandbox Code Playgroud)

F#是否了解其受歧视的工会的编制表格?如何在编译时获得F#中的DU.A类型?

typeof<DU> // compiles
typeof<DU.A> // error FS0039: The type 'A' is not defined
typeof<A> // error FS0039: The type 'A' is not defined
Run Code Online (Sandbox Code Playgroud)

我可以很容易地在F#中注册一个用于反序列化的函数.

open System
open ServiceStack.Text

JsConfig<DU>.RawDeserializeFn <-
    Func<_, _>(fun s -> printfn "Hooked"; if …
Run Code Online (Sandbox Code Playgroud)

f# servicestack servicestack-text

10
推荐指数
3
解决办法
560
查看次数