代码之家  ›  专栏  ›  技术社区  ›  Whoever

ServiceStack请求命中服务两次

  •  1
  • Whoever  · 技术社区  · 11 年前

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

    [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
    

    不知怎么的,该服务被击中了两次:第一次是正确的请求,然后是请求。文件夹未定义。奇怪的是,即使第二次调用不返回任何数据,框架也总是从第一次调用返回正确的结果。所以我从来没有注意到这一点,直到碰巧运行了一个SQL探查器。

    我不知道是什么原因导致了重试。我认为这可能与数据有关,因为如果我通过剃刀用户界面调用收件箱,它就不会重复。如果我打电话给档案馆,那就是了。但是,如果我使用像XYZ这样的随机参数进行调用,但没有返回任何数据,它也会重复调用。

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

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

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

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

    1 回复  |  直到 11 年前
        1
  •  2
  •   Community CDub    8 年前

    ServiceStack不会调用自己,如果一个服务被调用两次,很可能是客户端在调用它。使用Fiddler或WebInspector来了解实际情况。例如,如果你使用的是Ajax客户端,那么浏览器可能会发出单独的OPTIONS请求,在这种情况下,你可以 short-circuit all OPTIONS request with a Global Request filter .