如何调试ServiceStack服务方法?

时间:2015-04-17 23:13:16

标签: c# servicestack

我正在使用JsonServiceClient来测试数据库的自托管服务。客户端正在接收没有数据库中的8条记录的空数组。我的问题是,如果我在服务的Get方法中放置一个断点,它就永远不会触发。

以下是get方法的代码:

    public PracticesResponse Get(PracticesGetRequest request)
    {
        var parm = Request.QueryString.Get("source");
        var source = Uri.UnescapeDataString(parm);

        var response = new PracticesResponse
        {
            Practices = Repo.GetBySource(source).ToArray()
        };
        return response;
    }

如果我在代码中的任何地方放置断点,它永远不会触发,因此我无法判断我的查询参数是否未正确处理,或者我的存储库是否未连接,或者是什么。 如果我在调用JsonServiceClient get方法的代码行上中断执行并尝试在此处进入:

var dto = Client.Get<PracticesResponse>("/practices?source=Desire%20%Map");
Assert.That(dto.Practices.Length > 7);

调试器在不插入的情况下处理调用,下一个中断在Assert上。

这是simple Visual Studio application的链接,当我尝试进入JsonClient.Get方法时,它表现出完全相同的行为。

如何进入此方法以查看正在发生的事情?

1 个答案:

答案 0 :(得分:0)

如果断点在调试模式下永远不会被击中,那么您认为被解雇的代码没有被执行,或者VS.NET调试器没有被正确连接。但这通常只是ASP.NET应用程序中的一个问题,您需要通过“触摸”并重新保存 Web.config 来重新启动AppDomain,或者也可能是源代码不同步正在调试的内容(通常是尝试使用不同步的.pdb调试已编译的.dll的问题)。

由于这是一个自我托管,我的猜测是代码没有受到影响。您是否可以扩展您的问题以提供完整的Request DTO,其中包含已定义的任何自定义路由,您用于调用服务的代码以及原始HTTP请求/响应(您可以使用Fiddler获取),这将显示下面发生的情况。同时仔细检查以确保您的服务继承Service类或实现IService

在服务设计上,我会将Request DTO重命名为更像GetPractices这样的可读内容,而不是手动从QueryString中获取参数,只是从Request DTO读取它,如果你只是要指定返回类型在一个地方最好在Request DTO上注释,返回类型信息也可以在客户端上获得,例如:

PracticesResponse response = client.Get(new GetPractices { Source = src });

我会将服务器重写为:

public class GetPractices : IReturn<PracticesResponse> 
{
    public string Source { get; set; }
}

public object Get(GetPractices request)
{
    return new PracticesResponse {
        Practices = Repo.GetBySource(request.Source)
    };
}