0

关于如何使用 httpHandler 路径属性的规则是否有很好的资源?

当我的处理程序在不同的环境中被调用时,我看到了不同的结果,所以让我解释一下......

我想允许一个 URL,例如:

http://mysite/_layouts/myCompany/rest/myservice.svc/param1/param2

我想仅在“myCompany”文件夹/链接下调用我的处理程序,因此我将以下 web.config 文件放在相应的文件夹中,以免影响应用程序的其余部分。这适用于某些机器,但不适用于其他机器:

<configuration>
    <system.web>
        <httpHandlers>
            <add verb="*" path="myservice.svc" type="..." validate="false"/>
        </httpHandlers>
    </system.web>
</configuration>

现在,我不得不承认我有点惊讶,因为它基本上必须从“rest/myservice.svc/param1/param2”相对路径中找到“myservice.svc”,但它确实找到了它-但仅在我的三台测试机器中的两台上。因此,我在失败的机器上尝试了以下操作:

<add verb"*" path="rest/myservice.svc/*/*" type="..." validate="false"/>

这工作了几次,现在不工作了。作为逻辑类型,我真的很困扰,经过一番努力,我无法解释这一点,但我无法让它再次工作。另请参阅这个类似的 Stack Overflow 问题。

请注意,以下内容确实有效,但它让我求助于查询字符串变量来提供不理想的参数。

<add verb"*" path="rest/myservice.svc/*" type="..." validate="false"/>

我在两台机器上查看了父 web.config 文件,它们给出了不同的结果,以查看它们如何定义任何 httpHandlers,并且没有任何问题出现。

所以,我正在寻找对如何使用这条路径的理解。

值得一提的是,它在 SharePoint 站点中运行(因此在这个问题上使用了“sharepoint”标签),我使用它来提供 REST(简单的“text/xml”)而不是 SOAP。我不想使用成熟的 WCF,因为安装 SharePoint 的次数太多了,所以我改用 HTTP 处理程序。

此外,我得到的错误如下:

virtualPath   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result) 
   at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) 
   at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) 
   at System.ServiceModel.Activation.HttpHandler.ProcessRequest(HttpContext context) 
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
4

1 回答 1

0

仍然欢迎回答,但在这里我找到了一个简单的解决方法。如此简单,让我感到困扰,我以前没有想到它......

由于我从某个时刻拥有文件夹/url,我可以确保一切都通过我的处理程序:

<add verb"*" path="*" type="..." validate="false"/>

它有多简单:-S。

这样做的一个附带好处是我可以更好地报告不正确 URL 的错误。我可能决定使用处理程序工厂而不是处理程序;那么唯一的变化是指定的类型

于 2009-06-05T21:01:59.800 回答