サービスを実行するためにさまざまな例に従ってきましたが、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
自己ホスト型テスト アセンブリに表示されるようにするために不足しているものはありますか?
ありがとう!