2013-07-05 20 views
2

我首次使用ServiceStack作爲一個以ASP.NET MVC開始的全新項目。我在根主持ServiceStack API,所以我的web.config看起來像這樣:ServiceStack服務元數據不顯示任何操作

<system.web> 
    <httpHandlers> 
     <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" /> 
    </httpHandlers> 
    </system.web> 
    <system.webServer> 
    <handlers> 
     <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> 
    </handlers> 
    </system.webServer> 

和我App_Start/RouteConfig.cs:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("*"); 
} 

這裏是我的服務:

[Route("/catalogs/{ID}")] 
[DataContract] 
public class CatalogRequest : IReturn<Catalog> 
{ 
    [DataMember] 
    public int ID { get; set; } 
} 

[DefaultView("Catalogs")] 
public class CatalogService : Service 
{ 
    public object Get(CatalogRequest request) 
    { 
     return (request.ID == 9999) ? new Catalog() { ID = 9999 } : null; 
    } 
} 

我用於測試的以下內容:

public class TestAppHost : AppHostHttpListenerBase 
{ 
    public TestAppHost() : base("TestService", typeof(TestAppHost).Assembly) { } 

    public override void Configure(Funq.Container container) 
    { 
     IoC.Configure(container); // IoC is where all Funq configuration is done 
    } 
} 

在我的VisualStudio的單元測試,我開始了APPHOST這樣的:

[TestClass] 
public class TestHelper 
{ 
    public const string TEST_HOST_URL = "http://127.0.0.1:8888/"; 

    private static TestAppHost __AppHost; 

    [AssemblyInitialize] 
    public static void Initialize(TestContext context) 
    { 
     // Start the test app host. 
     __AppHost = new TestAppHost(); 
     __AppHost.Init(); 
     __AppHost.Start(TEST_HOST_URL); 
    } 

    [AssemblyCleanup] 
    public static void Cleanup() 
    { 
     __AppHost.Dispose(); 
     __AppHost = null; 
    } 
} 

當我運行我的測試:

[TestMethod] 
public void RequestCatalogByID() 
{ 
    var client = new JsonServiceClient(TestHelper.TEST_HOST_URL); 
    var request = new CatalogRequest() { ID = 9999 }; 
    var response = client.Get(request); 

    Assert.IsNotNull(response); 
} 

我得到即使URL似乎是正確的一個「未找到」異常:http://127.0.0.1:8888/catalogs/9999

指向瀏覽器http://127.0.0.1:8888/metadata顯示沒有任何操作的元數據頁面。

我在做什麼錯?

回答

2

注意你在APPHOST基本構造通過組裝應該是所有的服務實現的(即不是你APPHOST),所以會轉而:

public class TestAppHost : AppHostHttpListenerBase 
{ 
    public TestAppHost() : base("TestService", typeof(CatalogService).Assembly){} 
    ... 
} 
+0

咄,我傻!謝謝! :) –

+0

我有同樣的問題。該服務與AppHostBase位於同一個項目中。 – mvbaffa