J'utilise le WCF REST stater kit pour créer un service xml sur HTTP simple. Dans le cadre de cette Im en utilisant un RequestInterceptor pour faire l'authentification. À l'intérieur du RequestInterceptor, j'ai accès à un objet System.ServiceModel.Channels.RequestContext à partir duquel je peux obtenir l'URL de la requête, les paramètres de la chaîne de requête et d'autres choses utiles. Ce que je ne peux pas faire, c'est comment avoir accès au HttpContext de la requête. J'ai plusieurs choses stockées dans le HttpContext auquel je veux accéder à l'intérieur du requestInterceptor mais j'ai du mal à y accéder. Lorsque j'utilise le quickwatch dans Visual Studio, je peux voir qu'il est enterré dans des membres privés du requestContext. Quelqu'un peut-il me montrer comment accéder au HttpContext, en utilisant peut-être une réflexion sur l'objet RequestContext?Accédez à HttpContext à l'intérieur de WCF RequestInterceptor
Répondre
Vous pouvez accéder à HttpContext ASP.NET à l'intérieur de tout service WCF hébergé dans ASP.NET tant que vous activez la compatibilité. Cela se fait en deux étapes:
- Appliquer la AspNetCompatibilityRequirementsAttribute à votre classe de service et définissez la propriété RequirementsMode Required
Assurez-vous que vous activez la compatibilité en configurant les éléments suivants:
<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” /> </system.serviceModel>
Une fois cela fait, vous pouvez accéder à l'instance HttpContext actuelle à tout moment en utilisant the static Current property. Par exemple:
foreach(HttpCookie cookie in HttpContext.Current.Request.Cookies)
{
/* ... */
}
Notez que permettant une intégration avec le moteur d'exécution ASP.NET n'entraîne une charge supplémentaire pour chaque demande, donc si vous ne avez pas besoin, vous pouvez économiser un peu de performance en ne permettant et en utilisant simplement la System.ServiceModel.Web runtime à la place. Vous avez accès à toutes les informations dont vous avez besoin en utilisant les classes HttpRequestResponseMessageProperty et HttpResponseMessageProperty. Pour plus d'informations sur le sujet, voir this section of MSDN titled WCF and ASP.NET.
J'ai déjà en place tout ce que vous mentionnez ci-dessus. Je suis capable d'accéder à HttpContext dans une méthode OperationContract normale mais à l'intérieur d'un requestInterceptor (http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request -interceptor.aspx? CommentPosted = true # commentmessage) –