2012-11-22 11 views
5

मैं डब्ल्यूसीएफ डाटा सर्विसेज द्वारा लागू ओडाटा एंडपॉइंट पर इकाइयों को पढ़ने/संशोधित करने के लिए एक AJAX- आधारित घटक (केंडोयूआई) का उपयोग करना चाहता हूं।डब्ल्यूसीएफ डेटा सेवा प्रीफलाइट विकल्प अनुरोधों का समर्थन नहीं कर रही है?

सेवा कार्यान्वयन पहली जगह में काफी आसान था:

public class MyFooService : DataService<FooContext> 
{ 
    public static void SetEntitySetAccessRules(IDataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite); 
    } 
} 

अब मैं PUT का उपयोग कर संस्थाओं को संशोधित करने में सक्षम होने की उम्मीद कर रहा था। KendoUI एक अच्छा और आसान कॉन्फ़िगरेशन इंटरफ़ेस प्रदान करता है और PUT अनुरोध उत्पन्न करने में एक अच्छा काम करता है।

हम एक क्रॉस-डोमेन अनुरोध कर रहे हैं और सीओआरएस का उपयोग कर रहे हैं। इसलिए, उदाहरण के लिए, फ़ायरफ़ॉक्स PUT भेजने से पहले ओडाटा सेवा के लिए प्रीफलाइट विकल्प अनुरोध भेजता है।

दुर्भाग्य से सेवा एंडपॉइंट विकल्प के बाहर विकल्प का समर्थन नहीं करता है: विकल्प अनुरोध का जवाब खाली सामग्री के साथ "501 लागू नहीं किया गया" है। कम से कम हम कामयाब रहे कि प्रतिक्रिया CORS हैडर है:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <!-- Enable cross-origin resource sharing --> 
    <!-- http://enable-cors.org/#how-asp.net --> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" /> 
     <add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With" /> 
     <add name="Access-Control-Allow-Credentials" value="true" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 

इस के लिए Googling थोड़ा चुनौतीपूर्ण है क्योंकि "विकल्प" एक बहुत ही लोकप्रिय शब्द है पता चला है ...

मैं this article पाया, लेकिन यह बहुत लगता है, बहुत जटिल। मेरा मतलब है, ओडाटा आरईएसटी के बारे में है, मैं कल्पना नहीं कर सकता कि डब्ल्यूसीएफ डाटा सर्विसेज प्रीफलाइट अनुरोधों को अनुमति देने का एक आसान तरीका प्रदान नहीं करता है, या?

+1

मैं इसे ले कि WCF OData सेवा डब्ल्यूसीएफ पर काम करती है और उसी डब्ल्यूसीएफ पाइपलाइन के माध्यम से गुजरती है। यदि ऐसा है तो इस [उत्तर।] में लिंक देखें (http://stackoverflow.com/questions/11597314/origin-http-localhost-is-not-allowed-by-access-control-allow-origin/11606701#11606701)। आईएमएचओ डब्ल्यूसीएफ में सीओआरएस को लागू करने का सबसे आसान तरीका है। – Obaid

+0

मुझे पता है कि यह वही नहीं है जो आप चाहते हैं लेकिन मुझे लगता है कि क्रॉस डोमेन अनुरोधों के साथ काम करने का सबसे आसान तरीका आईआईएस रिवर्स प्रॉक्सी का उपयोग करना है। इस तरह आप केवल अपने डोमेन के खिलाफ जाते हैं और आईआईएस वह है जो आपके डोमेन को अन्य डोमेन भेजता है। फिर, आपके कोड को अन्य डोमेन के बारे में कुछ भी नहीं पता है। – lontivero

+0

यादृच्छिक रूप से इस पर ठोकर खाई; बस सोचा कि मैं [इस] से लिंक करूंगा (https://stackoverflow.com/questions/19808069/wcf-dataservice-odata-and-cors) और [वह] (https://data.uservoice.com/forums/ अतिरिक्त चर्चा के लिए 72027-डब्ल्यूसीएफ-डाटा-सर्विसेज-फीचर-सुझाव/सुझाव/445044 9-कॉर्स-सपोर्ट)। – tne

उत्तर

1

वर्तमान में डब्ल्यूसीएफ डाटा सर्विसेज सीओआरएस का समर्थन नहीं करते हैं, और मैंने जो भी समाधान देखा है वह एक हैक है, और सबसे अच्छा काम करता है।

मुझे एक ही समस्या थी, और मैंने बस अपना कोड डब्ल्यूसीएफ से वेब एपीआई 2 ओडाटा समाधान में पोर्ट किया। वेब एपीआई 2 में सीओआरएस के लिए समर्थन है और यह सेटअप करना वास्तव में आसान है।

आप वेब एपीआई के साथ परिचित हैं, तो यह लिंक की जाँच: http://msdn.microsoft.com/en-us/magazine/dn532203.aspx

और यहाँ कैसे वेब एपीआई के साथ एक OData समाप्ति बिंदु बनाने के लिए पर एक ट्यूटोरियल है: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/creating-an-odata-endpoint

+0

धन्यवाद। हालांकि उत्तर देर हो चुकी है (मैंने वेबएपीआई पर स्विच करके समस्या हल की है :-)) - यह भविष्य के पाठकों के लिए एक उपयोगी उत्तर होगा जहां तक ​​मैं कह सकता हूं। – chiccodoro

संबंधित मुद्दे