1

サービスを実行するためにさまざまな例に従ってきましたが、IIS を介して、サービスを一覧表示するメタデータ ページが表示されるようになりました。しかし、自動テストのためにサービスをセルフホスト モードで実行できるようにしたいとも考えています。サービスなしで ServiceModel ライブラリを簡単に配布できるように、クラスをクラスとは別のServiceModelアセンブリに分割しました。Service

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)
    {

IIS でこの AppHost を使用すると、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自己ホスト型テスト アセンブリに表示されるようにするために不足しているものはありますか?

ありがとう!

4

1 に答える 1

1

AppHosts のコンストラクターで、2 つの異なるアセンブリを指しています。

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

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

デフォルトではIService、これらのアセンブリに存在する のみが登録され、自動配線されます。

注: 基本の AppHost コンストラクターで複数のアセンブリを提供できます。詳細については、モジュール化サービスに関する wiki を参照してください。

于 2013-05-31T20:10:34.633 に答える