servicestack Servicestack GetAsync OnSuccess未激发,servicestack,servicestack" /> servicestack Servicestack GetAsync OnSuccess未激发,servicestack,servicestack" />

servicestack Servicestack GetAsync OnSuccess未激发

servicestack Servicestack GetAsync OnSuccess未激发,servicestack,servicestack,我使用ServiceStack来原型化web服务API,在测试GetAsync时遇到了一个问题。具体地说,onSuccess操作在我期望的时候不会被调用 这是我的密码: 服务器: [Route("/accounts/", "GET") public class AccountRequest : IReturn<AccountResponse> { public string EmailAddress {get; set;} } public class AccountRes

我使用ServiceStack来原型化web服务API,在测试GetAsync时遇到了一个问题。具体地说,onSuccess操作在我期望的时候不会被调用

这是我的密码:

服务器:

[Route("/accounts/", "GET")
public class AccountRequest : IReturn<AccountResponse>
{
    public string EmailAddress {get; set;}
}

public class AccountResponse
{
    public Account Account {get; set;}
}

public class AccountService : Service
{
    public object Get(AccountRequest request)
    {
        return new AccountResponse{Account = new Account.....
    }
}
然而,这完全符合预期

using(var client = new JsonServiceClient("some url")
{
    var acc = client.Get(new AccountRequest{EmailAddress = "gibbons"});

    //acc is exactly as expected.
}
有趣的是,一个接一个地测试异步和非异步也是可行的:

using(var client = new JsonServiceClient("some url")
{
     client.GetAsync(new AccountRequest{EmailAddress = "gibbons"},
                    response => Console.WriteLine(response.Account.Something), //Works
                    (response, ex) => {throw ex;});

    var acc = client.Get(new AccountRequest{EmailAddress = "gibbons"});

    //Again, acc is exactly as expected.
}
在所有情况下,我都可以看到通过Fiddler通过HTTP传输的实际数据,因此我认为我对异步api的工作原理缺乏一些基本的了解


欢迎任何帮助。谢谢。

在响应完成之前,阻塞同步API不会返回,因为异步API是非阻塞的,所以执行会立即继续。只有在返回和处理响应时才会触发回调

在测试中,它使用
Thread.Sleep(1000)
休眠1秒,然后断言及时返回了响应


您等待多长时间来确定是否触发回调?

是的-我只是没有等待足够长的时间来响应。谢谢
using(var client = new JsonServiceClient("some url")
{
     client.GetAsync(new AccountRequest{EmailAddress = "gibbons"},
                    response => Console.WriteLine(response.Account.Something), //Works
                    (response, ex) => {throw ex;});

    var acc = client.Get(new AccountRequest{EmailAddress = "gibbons"});

    //Again, acc is exactly as expected.
}