ServiceStack请求命中服务两次

时间:2013-10-19 21:26:17

标签: request servicestack

我有这样一个简单的服务:

[Route("/Message/{Folder}", "GET")]
public class MessageList : IReturn<List<Message>>
{
    public string Folder { get; set; }
}

public class MessageListService : Service
{
    private readonly IDatabase _database;
    public MessageListService(IDatabase database)
    {
        _database = database;
    }

    public List<Message> Get(MessageList request)
    {
        return _database.Fetch<Message>(
        "EXEC GetMessage @@Folder=@1", request.Folder);
     }

我称之为:

     http://localhost/Message/Inbox

不知何故,该服务被点击了两次:首先是正确的请求,然后是request.Folder undefined。奇怪的是,即使第二次调用没有返回任何数据,框架总是从第一次调用返回正确的结果。所以我从来没有注意到这一点,直到碰巧运行SQL分析器。

我无法弄清楚导致重试的原因。我认为它可能与数据有关,因为如果我通过我的剃刀UI调用Inbox,它就不会重复。如果我调用Archive,那么它就是。但是,如果我使用像XYZ这样的随机参数调用而不返回任何数据,它也会重复调用。

但是,如果我这样称呼服务:

  http://localhost/Message/Inbox?format=json

然后它总是命中两次服务,一个有效,一个没有输入参数。但是Json的结果似乎总是正确的。第二个无效的调用只是命中数据库然后就消失了。

真的需要一些帮助。知道发生了什么事吗?

1 个答案:

答案 0 :(得分:2)

ServiceStack不会调用自身,如果服务被调用两次,则客户端可能会这样做。使用Fiddler或WebInspector找出真正发生的事情。例如,如果您使用的是Ajax客户端,那么浏览器可能会发出单独的OPTIONS请求,在这种情况下您可以short-circuit all OPTIONS request with a Global Request filter