关于如何使用httphandler path属性的规则是否有很好的资源?
当在不同的环境中调用我的处理程序时,我看到了混合的结果,所以让我解释一下…
我想允许一个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"/>
这工作了几次,现在不工作了。作为一个逻辑型的人,我真的很困扰,在努力了一点之后,我不能解释这一点,但我没能让它再次工作。另请参见
this
类似的堆栈溢出问题。
请注意,以下内容确实有效,但它使我使用查询字符串变量来提供不理想的参数。
<add verb"*" path="rest/myservice.svc/*" type="..." validate="false"/>
我查看了两台机器上的父web.config文件,它们给出了不同的结果,以了解它们如何定义任何httphandler,并且没有出现任何问题。
所以,我想了解一下这条路径是如何被利用的。
值得一提的是,它运行在一个SharePoint站点上(因此这个问题上的“SharePoint”标记),我使用它来提供REST(简单的“文本/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)