是否有关于如何使用httpHandler路径属性的规则的良好资源?
我看到在不同的环境中调用我的处理程序时的结果好坏参半,所以让我解释一下......
我想允许使用以下网址:
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类似的Stack Overflow问题。
请注意,以下内容确实有效,但是我会使用查询字符串变量来提供不理想的参数。
<add verb"*" path="rest/myservice.svc/*" type="..." validate="false"/>
我在两台计算机上查看了父web.config文件,它们给出了不同的结果,看看它们如何定义任何httpHandler,没有任何问题突然出现。
所以,我正在寻找对如何利用这条道路的理解。
对于它的价值,这是在SharePoint站点中运行(因此在这个问题上的“sharepoint”标签),我使用它来提供REST(简单的“text / xml”)而不是SOAP。我不想使用完整的WCF,因为这会使得船的安装过多,因此我使用的是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)
答案 0 :(得分:0)
答案仍然是受欢迎的,但在这里我找到了一个简单的解决方法。如此简单,让我感到困扰的是我之前没想过......
由于我从某一点拥有文件夹/ url,我可以确保所有内容都通过我的处理程序:
<add verb"*" path="*" type="..." validate="false"/>
它有多简单:-S。
这样做的另一个好处是我可以更好地报告错误URL的错误。我可能决定使用处理程序工厂而不是处理程序;然后唯一的变化是指定的类型。