我们一直在使用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会将我重定向到元数据页面,该页面有效。
我尝试过以下步骤:
但它似乎没有什么区别。
我在配置中更改了尝试使其工作的内容:
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年生活:)
答案 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
});