无法通过HTTPS使ServiceStack在IIS6中工作

时间:2012-04-04 05:04:29

标签: .net rest https iis-6 servicestack

我在使用ServiceStack在IIS6中使用HTTPS时遇到问题,我似乎无法找到有关设置它的任何文档。 目前我有一个类似的端点设置 - http://example.com/api.ashx。当我浏览到这个时,我得到了有用的ServiceStack生成页面,它解释了http://example.com/api.ashx/metadata提供的API。 当我浏览https://example.com/api.ashx(注意https)时,我会收到此错误消息 -

  '/'应用程序中的服务器错误。无法找到该资源。   描述:HTTP 404.您正在寻找的资源(或其中一个   依赖项)可能已被删除,其名称已更改,或者是   暂时不可用。请查看以下网址并制作   确保它拼写正确。请求的URL:/api.ashx

我在web.config中设置了以下内容(例如此处 - http://www.servicestack.net/ServiceStack.Hello/) -

<!-- ServiceStack: Required to host at: /api.ashx -->
    <location path="api.ashx">
        <system.web>
            <httpHandlers>
                <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
            </httpHandlers>
        </system.web>

在我的本地Windows 7机箱上运行IIS7,它运行正常,但测试和实时环境仍在使用IIS6,我无法在那里工作。

使用https时,其他常规aspx页面正常工作。

我很感激任何能够推动我朝着正确方向前进的人!

2 个答案:

答案 0 :(得分:9)

IIS 6的问题在于IIS 6.0请求管道无法识别没有ASP.NET扩展的路径,例如.aspx未传递给ASP.NET isapi hander。因此,通常有2个选项可以实现此目的,因此您可以在IIS 6上运行ServiceStack:

  1. 将Web.Config中的servicestack路径从“*”更改为“servicestack.ashx”

    &LT;&的System.Web GT;

    &LT; HttpHandlers的&GT;     &lt; add path =“servicestack.ashx”type =“ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory,ServiceStack”verb =“*”/&gt;   &LT; / HttpHandlers的&GT;

    &LT; /system.web>

  2. 为虚拟目录添加通配符映射,以将所有未处理的请求传递给ASP.NET: 按照以下步骤使用IIS 6.0创建通配符脚本映射:

    1. 右键单击网站,然后选择“属性”
    2. 选择“主目录”选项卡
    3. 单击“配置”按钮
    4. 选择Mappings选项卡
    5. 单击“插入”按钮(参见图4)
    6. 将aspnet_isapi.dll的路径粘贴到Executable字段中(您可以从.aspx文件的脚本映射中复制此路径)
    7. 取消选中标记为“验证文件存在”的复选框
    8. 单击“确定”按钮
  3. IIS 6.0 Wildcard mapping

答案 1 :(得分:1)

mythz回答对我不起作用。

我通过使用servicestack配置向web.config添加位置标记来实现它。 我发现servicestack使用了path =“*” - 但是接受了很多请求(Episerver)但是解决了这个问题:

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

然后使用UniqueTag为所有路径添加前缀:

[Route("/UniqueTag/DeletePost/{Id}", Verbs = "POST")]

但请注意,mythz的答案中的选项2可能也是必需的,因为它是我们解决方案中的默认设置。