2012-09-25 62 views
2

不知道我是否缺少這裏的東西。我在單元測試中使用AppHostHttpListenerBase來測試服務,並在其構造函數中爲handlerPath參數傳遞「api」。我有一個服務在/ hello/{Name}註冊,並且正在使用servicestack 3.9.17版本。servicestack AppHostHttpListenerBase處理程序路徑參數不起作用?

在我的APPHOST類的配置方法,如果我訪問

EndpointHostConfig.Instance.ServiceStackHandlerFactoryPath

一旦我回來在單元測試中相同的呼叫返回null它retrurns「API」

如果我嘗試使用/ hello/test調用服務,它將起作用。 如果我使用/ api/hello/test失敗

看來AppHostHttpListenerBase丟失了handlerPath?

聽起來像是一個錯誤還是我錯過了什麼?

下面

是代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using NUnit.Framework; 
using ServiceStack.ServiceClient.Web; 
using ServiceStack.ServiceInterface; 
using ServiceStack.Text; 
using ServiceStack.WebHost.Endpoints; 

namespace Bm.Tests 
{ 
    /// <summary> 
    /// Test self hosting for unit tests 
    /// </summary> 
    [TestFixture] 
    public class TestService 
    { 
    private TestServiceAppHost _apphost; 
    private const string HOST_URL = @"http://localhost:1337/"; 
    [TestFixtureSetUp] 
    public void TestFixtureSetUp() 
    { 
     _apphost = new TestServiceAppHost(); 
     _apphost.Init(); 
     _apphost.Start(HOST_URL); 

    } 

    [Test] 
    public void TestHelloServiceJson() 
    { 

     var prefix = EndpointHostConfig.Instance.ServiceStackHandlerFactoryPath; 
     Assert.AreEqual("api", prefix, "Should be api"); 

     var client = new JsonServiceClient(HOST_URL); 
     var response = client.Send<HelloResponseTest>(new HelloTest() { Name = "Todd" }); 
     Assert.AreEqual("Hello, Todd", response.Result); 
    } 


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

    } 

    public class HelloTest 
    { 
    public string Name { get; set; } 
    } 

    public class HelloResponseTest 
    { 
    public string Result { get; set; } 
    } 

    public class HelloServiceTest : ServiceBase<HelloTest> 
    { 
    protected override object Run(HelloTest request) 
    { 
     return new HelloResponseTest { Result = "Hello, " + request.Name }; 
    } 
    } 

    //Define the Web Services AppHost 
    public class TestServiceAppHost : AppHostHttpListenerBase 
    { 
    public TestServiceAppHost() : base("testing HttpListener", "api", typeof(HelloServiceTest).Assembly) { } 

    public override void Configure(Funq.Container container) 
    { 
     // this works and returns api 
     var prefix = EndpointHostConfig.Instance.ServiceStackHandlerFactoryPath; 
     Routes 
       .Add<HelloTest>("/hello") 
       .Add<HelloTest>("/hello/{Name}"); 
    } 
    } 
} 

回答

1

如果您希望處理程序的根路徑是/api,你需要將它添加到聽者的URL,即:

_apphost.Start("http://localhost:1337/api/");