【问题标题】:How does service stack determine available services?服务堆栈如何确定可用服务?
【发布时间】: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


【解决方案1】:

从 cmets 复制出来,这样更容易找到、更易读、更准确

遇到这个问题时我做了几件事:

1 - 在您的 AppHost 类中将 typeof(UploadFileService).Assembly 添加到传递给基类的程序集数组中以显式尝试加载它

2 - 在 UploadFileService 类中确保您引用的是 'ServiceStack.ServiceInterface.Service' 而不是 'System.Web.Services.Description.Service' 这是不可能的,因为类不能从System.Web.Services.Description.Service

3 - 如果通过 Visual Studio 运行,请停止 IIS Express 以强制运行“Application_Start”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多