2009-06-05 6 views
0

Existe-t-il une bonne ressource pour les règles concernant l'utilisation de la propriété de chemin httpHandler?Quelles sont les règles concernant les chemins httpHandler dans ASP.NET?

Je vois des résultats mitigés pour quand mon gestionnaire est appelé dans des environnements différents, alors laissez-moi vous expliquer ...

Je veux permettre une URL telle que:

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

Je voudrais Pour invoquer mon gestionnaire uniquement sous le dossier/lien "myCompany", placez le fichier web.config suivant dans le dossier correspondant afin de ne pas affecter le reste de l'application. Cela fonctionne sur certaines machines, mais pas sur d'autres:

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

Maintenant, je dois admettre que je suis un peu surpris que cela a fonctionné car il avait essentiellement pour trouver le « myservice.svc » de la chemin relatif "rest/myservice.svc/param1/param2", mais il l'a trouvé - mais seulement sur deux de mes trois machines de test. Donc, j'ai essayé ce qui suit sur la machine qu'il a échoué sur:

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

Cela a fonctionné quelques fois et est maintenant ne fonctionne pas. Étant le type logique, cela me dérange vraiment qu'après un peu de diligence, je ne peux pas expliquer cela, mais je n'ai pas réussi à le faire fonctionner à nouveau. Voir aussi this question Stack Overflow similaire. Notez que ce qui suit fonctionne, mais il me donne recours à des variables de chaîne de requête pour fournir des paramètres qui ne sont pas idéaux.

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

J'ai regardé dans les fichiers web.config parent le long du chemin sur deux machines qui donnent des résultats différents pour voir comment ils définissent les httpHandlers et rien comme un sauté problème. Donc, je cherche à comprendre comment ce chemin est utilisé. Pour ce que ça vaut, cela fonctionne dans un site SharePoint (d'où le tag "sharepoint" sur cette question) et je l'utilise pour fournir REST (simple "text/xml") au lieu de SOAP. Je ne veux pas utiliser le WCF complet, car cela fait basculer le bateau un peu trop d'installations de SharePoint, donc j'utilise un gestionnaire HTTP à la place.

En outre, l'erreur que je reçois est la suivante:

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) 

Répondre

0

Une réponse est toujours le bienvenu, mais ici, je trouve une solution de contournement simple. Si simple ça me dérange que je ne pensais pas avant ...

Depuis que je possède le dossier/url à partir d'un certain point, je peux vous assurer que tout passe par mon gestionnaire:

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

Comment simple peut-il obtenir: -S.

Un avantage secondaire de ceci est que je peux mieux signaler une erreur pour les URL incorrectes. Je peux décider d'utiliser une usine de manutention à la place d'un gestionnaire; alors le seul changement est le type qui est spécifié.

+0

La réponse [ici] (http://stackoverflow.com/questions/955417/httphandler-to-hook-the-svc-requests) peut être pertinente. – leakyboat

Questions connexes