2012-11-19 6 views
6

Tôi có cấu hình sau.Tại sao ServiceStack trả về 404 với cấu hình này?

<location path="services"> 
    <system.web> 
    <httpHandlers> 
     <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" /> 
    </httpHandlers> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
    </system.web> 
    <!-- Required for IIS 7.0 --> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> 
    </handlers> 
    </system.webServer> 
</location> 

Nếu tôi thêm một phần khác <system.webServer />, không thuộc một yếu tố location, ServiceStack trả 404 cho tất cả các yêu cầu. Loại bỏ nó, và tất cả mọi thứ hoạt động trở lại.

Dưới đây là một ví dụ phản ứng:

 
HTTP/1.1 404 Not Found 
Cache-Control: private 
Content-Type: text/plain; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-Powered-By: ServiceStack/3.926 Win32NT/.NET 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 19 Nov 2012 23:15:46 GMT 
Content-Length: 1528 

Handler for Request not found: 


Request.ApplicationPath: /MyWebApp.Web.UI 
Request.CurrentExecutionFilePath: /MyWebApp.Web.UI/services/echo/ 
Request.FilePath: /MyWebApp.Web.UI/services/echo/ 
Request.HttpMethod: GET 
Request.MapPath('~'): D:\Lib\MyWebApp\2013\MyWebApp\MyWebApp.Web.UI 
Request.Path: /MyWebApp.Web.UI/services/echo/ 
Request.PathInfo: 
Request.ResolvedPathInfo: /services/echo 
Request.PhysicalPath: D:\Lib\MyWebApp\2013\MyWebApp\MyWebApp.Web.UI\services\echo\ 
Request.PhysicalApplicationPath: D:\Lib\MyWebApp\2013\MyWebApp\MyWebApp.Web.UI\ 
Request.QueryString: 
Request.RawUrl: /MyWebApp.Web.UI/services/echo/ 
Request.Url.AbsoluteUri: http://localhost/MyWebApp.Web.UI/services/echo/ 
Request.Url.AbsolutePath: /MyWebApp.Web.UI/services/echo/ 
Request.Url.Fragment: 
Request.Url.Host: localhost 
Request.Url.LocalPath: /MyWebApp.Web.UI/services/echo/ 
Request.Url.Port: 80 
Request.Url.Query: 
Request.Url.Scheme: http 
Request.Url.Segments: System.String[] 
App.IsIntegratedPipeline: True 
App.WebHostPhysicalPath: D:\Lib\MyWebApp\2013\MyWebApp\MyWebApp.Web.UI 
App.WebHostRootFileNames: [global.asax,global.asax.cs,header.html,list.html,login.html,MyWebApp.web.ui.csproj,MyWebApp.web.ui.csproj.user,packages.config,web.config,bin,humanresources,js,obj,properties,styles,_sgbak] 
App.DefaultHandler: DefaultHttpHandler 
App.DebugLastHandlerArgs: GET|/MyWebApp.Web.UI/services/echo/|D:\Lib\MyWebApp\2013\MyWebApp\MyWebApp.Web.UI\services\echo\ 

Há chẳng phải càng tốt để có một phần system.webServer? Tôi muốn thêm các quy tắc viết lại url của IIS ở đó.

Trả lời

4

Tuyên bố bổ sung system.webServer có thể ảnh hưởng đến hội thảo tự động của ServiceStack về đường dẫn được lưu trữ từ Web.Config của bạn.

Bạn có thể cố gắng để thiết lập đường dẫn bằng tay để xem có giúp, ví dụ trong AppHost.Configure của bạn():

SetConfig(new HostConfig { 
    HandlerFactoryPath = "services", 
}); 
+0

Đó dường như là nó. Cảm ơn bạn đã sửa chữa (và một thư viện tuyệt vời). – Daniel

+0

thx :) kool, vui vì nó hoạt động. – mythz

+0

Cảm ơn, tôi đã gặp vấn đề tương tự ở Silverlight khi sử dụng dịch vụ của Ria. – epitka