将ServiceStack从3.9.8升级到3.9.70(新API)后的404

Jul*_*anR 6 .net c# servicestack

我们一直在使用ServiceStack的旧版本(3.9.8)一段时间了,我决定尝试升级到最新版本(3.9.70),虽然它是一个干净,没有麻烦的包升级 - 一切都编译和运行 - 现在每个服务URL都返回"未找到请求处理程序"404结果.

过去工作的URL的示例:

http://somewebserver.com/services/servicestack/jsv/syncreply/getuser

我们使用旧的API(IService<T>)并且不使用REST路由或任何类型的东西.

ServiceStack应用程序在ASP.NET MVC 3 Web应用程序中运行,该应用程序位于URL http://somewebserver.com/management/controller/action上.它似乎没有干扰,因为它被配置为忽略ServiceStack路由:

routes.IgnoreRoute("servicestack/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)

ServiceStack代码肯定正在运行,因为访问http://somewebserver.com/services/servicestack会将我重定向到元数据页面,该页面有效.

我尝试过以下步骤:

https://github.com/ServiceStack/ServiceStack/wiki/Run-servicestack-side-by-side-with-another-web-framework

但它似乎没有什么区别.

我在配置中更改了尝试使其工作:

1)删除了system.webServer/handlers中的旧行

<add path="servicestack" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
Run Code Online (Sandbox Code Playgroud)

2)添加了此位置部分:

<location path="servicestack">
<system.web>
  <httpHandlers>
    <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
  </httpHandlers>
</system.web>

<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>
Run Code Online (Sandbox Code Playgroud)

3)在应用程序主机设置中添加了此项:

this.Config.ServiceStackHandlerFactoryPath = "servicestack";
Run Code Online (Sandbox Code Playgroud)

对于POST和GET,调用URL都失败了.

这一切都在IIS 8下运行.

我很想知道这里发生了什么,所以我们终于可以升级并在2013年生活:)

Jul*_*anR 1

显然,解决方案在于我们启用 ServiceStack 功能的方式。我自己没有进行更改,但修复如下:

从 AppHost 中删除:

this.Config.EnableFeatures = Feature.Metadata | Feature.Jsv | Feature.Json;
this.Config.ServiceStackHandlerFactoryPath = "servicestack";
Run Code Online (Sandbox Code Playgroud)

取而代之:

Feature disableFeatures = Feature.Soap;
SetConfig(new EndpointHostConfig
{
  ServiceStackHandlerFactoryPath = "servicestack",
  EnableFeatures = Feature.All.Remove(disableFeatures),
  DebugMode = false,
  WriteErrorsToResponse = false,
  DefaultContentType = ContentType.Jsv,
  AllowJsonpRequests = false
});
Run Code Online (Sandbox Code Playgroud)