我一直在关注各种示例来运行我的服务,通过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
出现在自托管测试程序集中,我是否缺少一些内容?
谢谢!
答案 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。