2014-07-10 10 views
5

स्थितिडब्ल्यूसीएफ, वेबएपीआई और ओविन आईआईएस एकीकृत पाइपलाइन। मार्ग

मैं एक WCF बैकएंड का उपयोग करता है एक Silverlight आवेदन के आधार पर Owin जाएं। आगे बढ़ते हुए हम वेबएपीआई के साथ जेएस क्लाइंट में चले गए हैं।

मेरे पास कुछ वेबएपीआई नियंत्रक हैं जिन्हें मैं सिल्वरलाइट क्लाइंट से उपयोग करना चाहता हूं और इसलिए उन्हें एएसपी.Net एप्लिकेशन के भीतर लोड किया गया है जो डब्ल्यूसीएफ सेवाओं को होस्ट करता है।

यह "सभी सेवाएं उपलब्ध हैं" बिंदु से ठीक काम करता है, हालांकि डब्ल्यूसीएफ कॉल के लिए प्राधिकरण को कई बार बुलाया जा रहा है; Owin से और WCF ServiceAuthorizationManager के माध्यम से

WCF तरफ, मेरी ServiceAuthorizationManager कार्यान्वयन AuthHeader में टोकन पुष्टि करता है और फिर उस टोकन बदल देती है (System.IdentityModel दावा परिवर्तन अर्थ में)। वेबएपीआई पक्ष पर मैं Thinktecture.IdentityModel का उपयोग कर रहा हूं जो टोकन सत्यापन और दावा परिवर्तन करने के लिए ओविन मिडलवेयर प्रदान करता है।

समस्या यह है कि ओडब्ल्यूआईएन मिडलवेयर सभी अनुरोधों (डब्ल्यूसीएफ अनुरोधों सहित) के लिए बुलाया जाता है। तो डब्ल्यूसीएफ अनुरोध के मामले में मुझे सत्यापन और परिवर्तन दो बार निष्पादित किया जाता है। मैं केवल सेवा प्राधिकरण प्रबंधक को नहीं हटा सकता और मिडलवेयर इसे संभाल सकता हूं, क्योंकि डब्ल्यूसीएफ ओविन के कुछ भी नहीं जानता है और सेवा प्राधिकरण प्रबंधक का अंतिम चरण ऑपरेशन संदर्भ प्रिंसिपल (दावे प्रिंसिपल.क्यूरेंट के लिए अलग) सेट करना है।

प्रश्न

किसी को भी पहले से WCF और वेबएपीआई कंधे से कंधा मिलाकर बैठे इस तरह एक समस्या थी गया है? डब्ल्यूसीएफ कॉल के लिए बहुत जल्दी ओडिन पाइपलाइन से बाहर निकलने का सबसे अच्छा तरीका होगा और यदि ऐसा है तो ओएमसी के माध्यम से ऐसा कैसे किया जा सकता है? या मैं किसी भी तरह से IAppBuilder.Map दृष्टिकोण का उपयोग केवल एपीआई मार्गों के लिए टोकन सत्यापन और परिवर्तन घटकों को पंजीकृत करने के लिए कर सकता हूं (इस मामले में कुछ भी शुरू/एपीआई)?

उत्तर

2

मैंने इसे Branched Pipeline के माध्यम से काम करने में कामयाब रहा है।

app.MapWhen(c => c.Request.Path.Value.Contains("/api"), 
        subApp => 
        { 
         subApp.UseJsonWebToken(
          issuer: clientDetails.Issuer, 
          audience: clientDetails.Audience, 
          signingKey: clientDetails.SigningKey); 

         subApp.UseClaimsTransformation(transformer.Transform); 

         var webApiConfig = WebApiConfig.Configure(); 
         webApiConfig.DependencyResolver = StructureMapConfig.HttpDependencyResolver(); 
         subApp.UseWebApi(webApiConfig); 
        }); 

केवल बात मैं सोच रहा हूँ क्यों IAppBuilder.MapWhen ऊपर के रूप में काम करती है, लेकिन जब मैं IAppBuilder.Map का उपयोग यह ऊपर काम करने के लिए ... जवाब देने के लिए

app.Map("/api", 
     subApp => ... 
+0

यदि कोई यह समझा सकता है कि 'app.Mapp' संस्करण क्यों काम नहीं करता है तो इसकी सराहना की जाएगी? –

+0

मेरे पास एक ही समस्या है: नक्शा जब एक स्पष्ट मिलान पूर्वानुमान काम करता है जबकि नक्शा नहीं करता है। –

0

बिग धन्यवाद प्रतीत नहीं होता। कोड के इस टुकड़े के साथ, मैं यह पता लगाने में सक्षम था कि सशर्त रूप से कॉल कैसे करें ताकि डब्लूसीएफ कॉल स्थिर सामग्री मिडलवेयर द्वारा नहीं पकड़े जा सकें।

//app.UseMiddleware<ServeStaticFilesMiddleware>(); 

    app.MapWhen(c => !c.Request.Path.Value.Contains(".svc"), 
      subApp => 
      { 
       subApp.UseMiddleware<ServeStaticFilesMiddleware>(); 
      }); 
संबंधित मुद्दे