【发布时间】:2013-10-09 03:55:29
【问题描述】:
我有几个使用 ServiceStack 定义的服务,它们工作正常。我使用以下请求对象添加了一个新对象
namespace LCS.Presentation.API.Model.DocumentTemplates
{
[Authenticate]
[Route("/document/{Type}/{Id}", "GET,PUT")]
[Route("/document/{Type}", "POST")]
public class UploadFileRequest : IReturn<UploadFileResponse>
{
public long Id { get; set; }
public string Type { get; set; }
public string Filename { get; set; }
public string File { get; set; }
}
}
我已经定义了一个响应对象:
public class UploadFileResponse : IResponseBase
{
public string Path { get; set; }
public ResponseStatus ResponseStatus { get; set; }
}
并为服务编写存根:
public class UploadFileService : Service
{
private ICoreLoggingService Logger { get; set; }
public UploadFileService(ICoreLoggingService logger)
{
Logger = logger;
}
public UploadFileResponse Post(UploadFileRequest request)
{
Logger.Debug("Got POST file request: {0}", request);
var response = new UploadFileResponse();
return response;
}
public UploadFileResponse Put(UploadFileRequest request)
{
Logger.Debug("Got PUT file request: {0}", request);
var response = new UploadFileResponse();
return response;
}
public UploadFileResponse Get(UploadFileRequest request)
{
return null;
}
}
但是,当我转到元数据页面 (/api/metadata) 时,我没有看到 UploadFileRequest 服务与我的其他服务一起列出。
ServiceStack 配置为植根于 /api,并且我的所有其他服务正确显示在元数据页面中,因为配置为使用该路由。
我遗漏了什么导致 ServiceStack 没有将此视为可用服务?
【问题讨论】:
-
它们应该默认自动显示。您是否将服务拆分为多个程序集?如果是这样,请参阅 Modularizing services wiki 以展示如何在您的 AppHost 中引用多个程序集 dll。
-
服务都在同一个程序集中。我希望看到新的自动出现,这就是为什么我有点困惑。
-
我将代码粘贴到一个测试项目中,并且能够在元数据页面上看到该服务。您的请求或服务类或其基类/接口是否使用此处代码中未显示的任何属性进行修饰?您使用的是什么版本的 ServiceStack?您将
EndpointHostConfig.DebugMode设置为true 还是false? -
遇到这个问题时我做了几件事:1)将 typeof(UploadFileService).Assembly 添加到传递给基类的程序集数组中以显式尝试加载它 2)在 UploadFileService 类中确保您引用的是“ServiceStack.ServiceInterface.Service”而不是“System.Web.Services.Description.Service”3)如果通过 Visual Studio 运行,请停止 IIS Express 以强制运行“Application_Start”。
-
谢谢,尝试 (1) 使其工作,并让我意识到当我告诉 @mythz 服务没有跨多个程序集拆分时我错了。将服务移入正确的程序集使其立即工作。
标签: servicestack