Mam program obsługi komunikatów API WWW MyHandler
, który chcę uruchomić w potoku OWIN jako oprogramowanie pośrednie. Więc konfigurowanie programu obsługi w ten sposób.Konwertowanie HttpRequestMessage na OwinRequest i OwinResponse na HttpResponseMessage
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseHttpMessageHandler(new MyHandler());
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"DefaultWebApi",
"{controller}/{id}",
new { id = RouteParameter.Optional });
app.UseWebApi(config);
}
}
Obsługa jest bardzo prosta i nic nie robi.
public class MyHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{ // <--- breakpoint here
var response = await base.SendAsync(request, cancellationToken);
return response;
}
}
mogę umieścić punkt przerwania wewnątrz SendAsync
i łamie ale następujący base.SendAsync
bomby cicho i widzę A first chance exception of type 'System.InvalidOperationException' occurred in System.Net.Http.dll
.
Mogę dość łatwo dodać MyHandler
do config.MessageHandlers
i będzie działać idealnie w potoku Web API, ale to nie jest to, co chcę zrobić. Chcę uruchomić MyHandler
w potoku OWIN. Czy to w ogóle możliwe? Powinno być. W przeciwnym razie nie ma sensu posiadanie metody rozszerzenia UseHttpMessageHandler
, jak sądzę. Po prostu nie mogłem znaleźć sposobu na zrobienie tego, co chcę robić.
Myślę, że wprowadzasz w błąd koncepcje programów do obsługi wiadomości i programów do delegowania. Obsługa komunikatów jest po prostu czymś, co pobiera żądanie i zwraca odpowiedź. –
Rozumiem różnicę między handlerami wiadomości a handlem delegującym. Handler delegujący to program obsługi komunikatów i miałem tylko nadzieję, że będę mógł korzystać z procedury obsługi delegowania zamiast obsługi komunikatów i magicznie będzie działał w potoku OWIN, tak jak działa w potoku Web API i najwyraźniej nie jest to możliwe , oparte na odpowiedzi Kirana. Zgadzam się, jestem zbyt ambitny. Dziękuję za spojrzenie na moje pytanie. – Badri