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

时间:2013-11-16 04:04:12

标签: c# .net servicestack

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

以前工作的网址示例:

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}");

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" />

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>

3)在应用主机设置中添加了这个:

this.Config.ServiceStackHandlerFactoryPath = "servicestack";

对于POST和GET,调用URL都失败了。过去两者都有效。

这一切都在IIS 8下运行。

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

1 个答案:

答案 0 :(得分:1)

显然,修复方法是我们如何启用ServiceStack功能。我自己没有做出改变,但这些都是修复:

从AppHost中移除:

this.Config.EnableFeatures = Feature.Metadata | Feature.Jsv | Feature.Json;
this.Config.ServiceStackHandlerFactoryPath = "servicestack";

替换为:

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