关于如何使用 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)