我正在使用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方法时,它表现出完全相同的行为。
如何进入此方法以查看正在发生的事情?
答案 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)
};
}