用于测试的自托管ServiceStack服务缺少元数据

时间:2013-05-31 19:40:21

标签: servicestack

我一直在关注各种示例来运行我的服务,通过IIS,我现在看到一个列出我的服务的元数据页面。但我也希望能够以自托管模式运行服务以进行自动化测试。我已将ServiceModel类分隔为一个单独的程序集而不是Service类,以便在没有我的服务的情况下更容易分发ServiceModel库。

以下是DTO声明的一个示例:

[Api("GET or DELETE a single folder by id.  Use POST to create a new Folder and PUT or PATCH to update it")]
[Route("/folders", "POST, PUT, PATCH")]
[Route("/folders/{Id}")]
public class Folder : IHasGuidId
{

这是FolderService

的开头
public class FolderService : Service
{
    public FolderResponse Get(Folder folder)
    {

将此AppHost用于IIS,我看到FolderService下列出了/metadata

internal class AtlasAppHost : AppHostBase
{
    public AtlasAppHost() : base("API v3.0", typeof(FolderService).Assembly)
    {
    }

    public override void Configure(Container container)
    {
        container.Adapter = new StructureMapContainerAdapter();
        AtlasInit(Config);
    }

    internal void AtlasInit(EndpointHostConfig config)
    {
        JsConfig.ExcludeTypeInfo = true;
        JsConfig.DateHandler = JsonDateHandler.ISO8601;
        JsConfig.EmitCamelCaseNames = true;
        config.EnableFeatures = Feature.All.Remove(Feature.Jsv | Feature.Soap | Feature.Csv);
    }
}

但是,使用下面的IntegrationTestBase,当我暂停调试器时,我在FolderService下看不到我的/metadata,请求始终返回NotFound

[TestFixture]
public class ApiIntegrationTestBase
{
    private TestAppHost _appHost;
    protected const string TestServiceUrl = "http://localhost:9755/";

    [TestFixtureSetUp]
    public void TestFixtureSetUp()
    {
        _appHost = new TestAppHost();
        _appHost.Init();
        _appHost.Start(TestServiceUrl);
    }

    [TestFixtureTearDown]
    public void TestFixtureTearDown()
    {
        _appHost.Dispose();
    }

    public class TestAppHost : AppHostHttpListenerBase
    {
        public TestAppHost()
            : base("Test App Host", typeof(FolderService).Assembly)
        {
        }

        public override void Configure(Container container)
        {
            var atlasAppHost = new AtlasAppHost();
            atlasAppHost.Configure(container);
            atlasAppHost.AtlasInit(Config);
            Routes.AddFromAssembly(typeof (FolderService).Assembly);
        }
    }
}

为了让我的FolderService出现在自托管测试程序集中,我是否缺少一些内容?

谢谢!

1 个答案:

答案 0 :(得分:1)

在AppHosts的构造函数中,您指向了两个不同的程序集:

public AtlasAppHost() : base("API v3.0", typeof(FolderService).Assembly) {}

public TestAppHost() : base("Test App Host", typeof(AtlasAppHost).Assembly) {}

默认情况下,这些程序集中仅存在IService已注册并自动连接。

注意:您可以在基础AppHost构造函数中提供多个程序集,有关详细信息,请参阅Modularizing Services上的wiki。