【问题标题】:ServiceStack.Factor has a bad module "ManagedPipelineHandler" in its module listServiceStack.Factor 在其模块列表中有一个错误模块“ManagedPipelineHandler”
【发布时间】:2013-02-25 10:33:56
【问题描述】:

我使用 ServiceStack 编写了一个 API 来从我的 SharePoint 文档库中检索文档,并且我正在使用 MVC 来输出结果。

但是,当我尝试运行我的应用程序时,我收到了一个 HTTP 错误:

500.21 ServiceStack.Factor 的模块列表错误中有一个坏模块“ManagedPipelineHandler”

我在 IIS 中以经典模式运行我的应用程序,因为我需要使用模拟来向我的 SharePoint 服务器进行身份验证。

在经典模式下使用 ServiceStack 似乎有困难。

我该如何解决这个错误?

我希望这是有道理的。

任何帮助将不胜感激

这是我的配置:

<system.webServer>
            <modules runAllManagedModulesForAllRequests="true" />
            <validation validateIntegratedModeConfiguration="false" />
            <handlers>
                <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="classicMode" resourceType="Unspecified" allowPathInfo="true" />
            </handlers>
        </system.webServer>

更新:

在我的开发机器上以不同用户身份运行我的应用程序工作正常,问题似乎是 IIS 和 ASP.NET 开发服务器之间的差异

【问题讨论】:

标签: asp.net-mvc sharepoint servicestack


【解决方案1】:

我认为经典模式无法处理路由配置。如此处所述 - http://www.asp.net/mvc/tutorials/older-versions/deployment/using-asp-net-mvc-with-different-versions-of-iis-cs - 在经典模式下使用 IIS 7.0 或使用映射到 ASP.NET 框架(aspx、axd、ashx)的文件扩展名时,您确实需要执行其他配置。

我能够使用以下配置获得针对 IIS 7 的经典模式

web.config(部分并使用 preCondition="integratedMode"):

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <add path="servicestack*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" 
             verb="*" preCondition="integratedMode" />
    </handlers>
</system.webServer>

为了访问 ASP.NET,我在路由中添加了 .aspx(我想您也可以使用上面链接中列出的其他解决方案)

Routes
.Add<Hello>("/hello.aspx")
.Add<Hello>("/hello.aspx/{Name}");

我可以向http://localhost/hello.aspx and http://localhost/hello.aspx?name=Test提出请求

更新 1

事实证明,在经典模式下运行时,我可以删除所有 IIS 7 (&lt;system.webServer&gt;) 元素。我的整个 web.config 如下。 &lt;httpHandlers&gt; 元素的 path 属性是什么?也许您收到 404 是因为 路径 不同?

<?xml version="1.0"?>
<configuration>
    <system.web>
        <httpHandlers>
            <add path="servicestack*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
        </httpHandlers>
        <compilation debug="true"/>
    </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

评论答案:

因此,这在功能上是否等同于您的示例中的 path="api*" ?

没有。见这里:http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx 在此处查看第 2 节:http://www.servicestack.net/ServiceStack.Hello/ &lt;httpHandler&gt; 元素具有自定义路径的路径属性。

另外,在 Visual Studio 中使用 IIS Express 作为开发服务器。您应该能够模拟标准开发服务器中不会​​出现的 IIS 7 经典模式问题。 http://www.microsoft.com/web/gallery/install.aspx?appid=IISExpress

【讨论】:

  • 感谢您的帮助。我们已经将路由“连线”了,可以这么说,很抱歉没有说清楚。
  • 感谢您的帮助。我们已经将路由“连接起来”,可以这么说,很抱歉没有说清楚。但是,您的配置很有趣。为什么在经典模式下使用 preconditionintegratedMode?我们已经尝试过了,我们得到了 404 - 有趣的是,ServiceStack 将我们重定向到 metadata 页面 - 由于经典模式不支持 /metadata 路径而失败。也许这里有机会?感谢您迄今为止的帮助 :) 抱歉重复,SO 拒绝让我们在研究过程中保持评论开放。
  • 根据新结果更新了我的答案。
  • 谢谢。我们刚刚检查过,我们将路径指定为“*”,但是,这是在api 路径下方的location 元素中。因此,这在功能上是否等同于您的示例中的path="api*"?更详细的是,我们可以在 ASP.NET 开发服务器上正常访问 ServiceStack 的 Web 前端,只是 IIS 7.x 导致了我们这个问题。
  • 针对上述问题的更新答案
猜你喜欢
  • 2013-07-02
  • 1970-01-01
  • 2014-01-21
  • 2013-06-13
  • 2011-10-14
  • 2012-01-29
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
相关资源
最近更新 更多