我正在尝试使用ServiceStack 3.9.17.0实现IAsyncService接口。
以下是我的服务定义的代码:
public class TestService : IAsyncService<int>
{
object IAsyncService<int>.ExecuteAsync(int request)
{
return "Yup that worked";
}
}
以下是我的Global.asax.cs代码:
public class Global : System.Web.HttpApplication
{
public class TestServiceAppHost : AppHostBase
{
public TestServiceAppHost() : base("Test Async Web Services", typeof(TestService).Assembly) { }
public override void Configure(Funq.Container container)
{
Routes.Add<int>("/Test");
}
}
}
当我运行并转到元数据页面时,我看到此项目中存在的其他两个服务,它们只是实现了IService(删除以保持样本清洁)但我的IAsyncService没有显示,如果我尝试点击它我收到以下消息:
<Int32Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
<ResponseStatus>
<ErrorCode>KeyNotFoundException</ErrorCode>
<Message>The given key was not present in the dictionary.</Message>
<StackTrace>
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at ServiceStack.WebHost.Endpoints.Utils.FilterAttributeCache.GetRequestFilterAttributes(Type requestDtoType)
at ServiceStack.WebHost.Endpoints.EndpointHost.ApplyRequestFilters(IHttpRequest httpReq, IHttpResponse httpRes, Object requestDto)
at ServiceStack.WebHost.Endpoints.RestHandler.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, String operationName)
</StackTrace>
</ResponseStatus>
</Int32Response>
非常感谢任何和所有帮助。
修改
我在mythz的建议后更新代码看起来像这样(再次感谢回复)。
DTO和服务:
[Route("/test")]
public class TestDTO
{
public int request { get; set; }
}
public class TestService : IAsyncService<TestDTO>
{
object IAsyncService<TestDTO>.ExecuteAsync(TestDTO request)
{
return "Yup that worked";
}
}
我将Global.asax.cs保持不变,只是我改变了使用DTO的路线,并使路线小写与DTO上的属性相匹配。我仍然有同样的问题。
编辑#2: 我升级到v3.9.71并且仍然遇到同样的问题。
答案 0 :(得分:0)
ServiceStack Services需要Request DTO,即具体的POCO类。您不能将int
用作请求DTO。如果需要,可以将其包装在POCO类中,例如:
[Route("/test")]
public class Request
{
public int Int { get; set; }
}