मेरे last post के आधार पर मैं बैचिंग काम करने में सक्षम था ... एक निश्चित बिंदु तक। मार्ग विशिष्ट हैंडलर पंजीकृत करने के अलावा मैं भी 2 सौंपने के संचालकोंवेबपै बैचिंग और हैंडलर
- है
- उपयोगकर्ता उपयोगकर्ता के सत्यापन और अनुरोध प्रवेश करने
बैच हैंडलर सौंपने के संचालकों के माध्यम से चला जाता है लॉग इन करने के लिए प्रमाणीकृत। जब Messagehandlerinvoker बच्चे/नेस्टेड अनुरोध भेजना शुरू करता है तो निम्नलिखित अपवाद फेंक दिया जाता है।
System.ArgumentException was unhandled by user code
HResult=-2147024809
Message=The 'DelegatingHandler' list is invalid because the property 'InnerHandler' of 'AuthenticationMessageHandler' is not null.
Parameter name: handlers
Source=System.Net.Http.Formatting
ParamName=handlers
StackTrace:
at System.Net.Http.HttpClientFactory.CreatePipeline(HttpMessageHandler innerHandler, IEnumerable`1 handlers)
at System.Web.Http.HttpServer.Initialize()
at System.Web.Http.HttpServer.<EnsureInitialized>b__3()
at System.Threading.LazyInitializer.EnsureInitializedCore[T](T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory)
at System.Threading.LazyInitializer.EnsureInitialized[T](T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory)
at System.Web.Http.HttpServer.EnsureInitialized()
at System.Web.Http.HttpServer.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at RoutingRequest.Service.Startup.BatchMessageHandler.<>c__DisplayClassd.<PrcoessRequest>b__b(Task`1 m) in C:\CEI\Clients\Footlocker.com\FL - Vendor Routing Portal\source\RoutingRequest.Service\Startup\BatchMessageHandler.cs:line 45
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
InnerException:
एक config विकल्प मुझे याद आ रहा है, या मैं delegating संचालकों को बायपास करना चाहिए?
संपादित करें यहां मेरा प्रमाणीकरण हैंडलर है।
public class AuthenticationMessageHandler
: DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
SetCurrentUser(request);
return base.SendAsync(request, cancellationToken);
}
private void SetCurrentUser(HttpRequestMessage request)
{
var values = new List<string>().AsEnumerable();
if (request.Headers.TryGetValues("routingrequest-username", out values) == false) return;
var username = values.First();
var user = Membership.GetUser(username, true);
if (user == null)
{
var message = string.Format("membership information for '{0}' could not be found.", username);
throw new HttpRequestException(message);
}
var roles = Roles.GetRolesForUser(username);
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(user.UserName), roles);
}
}
किरण के जवाब के आधार पर एक subclassed httpserver एक समस्या ठीक होती है और एक अन्य का परिचय। मेरी भूमिका प्रदाता को एक शून्य संदर्भ अपवाद मिल रहा है। उसमें देख रहे हैं।
क्या आप अपना प्रमाणीकरण हैंडलर कोड और इसके प्रारंभिक कोड पोस्ट कर सकते हैं? –