2012-01-11 9 views
5

मैं एक JSON WCF सेवा है और मैं इस तरह सेवा का उपयोग करने के लिए कुछ जावास्क्रिप्ट में लिखा है,WCF सेवा विधि के साथ असफल अनुमति नहीं

function stuffClick2() { 
     $.ajax({ 
      url: "http://192.168.54.98/JsonWCFService/Service1.svc/Post", 
      type: "POST", 
      contentType: "application/json", 
      data: '{"x":"1","y":"2","message":"The answer is: "}', 
      dataType: "html", 
      success: function(data) { $('body').html(data); }  
     }); 
    } 

मैं जो उस में ऊपर जावास्क्रिप्ट है एक HTML पृष्ठ में लिखा है। आईआईएस का उपयोग कर एचटीएमएल पेज परोसा जाता है।

जब मैं अपने पीसी पर क्रोम का उपयोग करके HTML पृष्ठ का उपयोग मैं देख रहा हूँ इन आपरेशनों इस क्रम में WCF JSON सेवा करने के लिए भेजा जा रहा है,

OPTIONS /JsonWCFService/Service1.svc/Post HTTP/1.1 
POST /JsonWCFService/Service1.svc/Post HTTP/1.1 

विकल्प पहले से असफल रहा था, लेकिन मैं बनाया विकल्प वापसी फोन इस हेडर जो तब यह काम करता है,

Access-Control-Allow-Origin: * 

लेकिन कॉलबैक मैं ऊपर परिभाषित किया है काम नहीं करता है,

success: function(data) { $('body').html(data); } 

मुझे पता है कि WCF सेवा कुछ इस तरह वापस आ गया है,

<b> The answer is 3 </b> 

लेकिन कॉलबैक कहा जाता है जब डेटा का मूल्य एक खाली स्ट्रिंग है।

जब मैं एक अलग ब्राउज़र (आईई) में एचटीएमएल पेज चलाता हूं जो केवल पोस्ट कॉल का कारण बनता है, लेकिन विकल्प कॉल नहीं करता है तो यह काम करता है। मैंने देखा कि आईई ने मुझे चेतावनी दी है कि यह एक सुरक्षा जोखिम है और मुझसे पूछता है कि मैं जारी रखना चाहता हूं या नहीं।

उत्तर

6

मैं इस मुद्दे पर भाग गया जब मैं एक मोबाइल एचटीएमएल ऐप के लिए डब्ल्यूसीएफ के साथ सीओआरएस लागू करने की कोशिश कर रहा था। विकल्प यह देखने के लिए एक प्रीफलाइट अनुरोध है कि इसे कॉल करने से पहले कोई विधि उपलब्ध है या नहीं।

  1. विकल्प है, मुझे लगता है, defaultly आईआईएस से बंद कर दिया:

    यहाँ अपनी समस्याओं हो जाएगा। संभवतः एक शुरुआती बिंदु यहां है: http://www-jo.se/f.pfleger/cors-and-iis

  2. विकल्प क्रिया इसे आपके वास्तविक पोस्ट विधि में लाएगी ताकि आप डब्लूसीएफ फ़िल्टर विकल्प में कुछ अन्य विधि में कुछ वही वापसी प्रकार के साथ कुछ भी करना चाहें जो कुछ भी नहीं करता है। और अपनी वास्तविक विधि में पोस्ट क्रिया को फ़िल्टर करें। यदि आप ऐसा नहीं करते हैं, तो आपको या तो आपकी विधि को दो बार बुलाया जाने वाला अजीब व्यवहार मिलेगा या यह एक webservice अस्पष्ट अपवाद फेंक देगा।

मुझे यकीन नहीं है कि आप सीओआरएस का उपयोग कर रहे हैं या नहीं, लेकिन प्रिंसिपल वही होगा, क्योंकि यह एक विकल्प अनुरोध भेजता है तो एक POST अनुरोध भेजता है।

+0

आप सही रास्ते पर हैं, लेकिन यह अजीब है क्योंकि यह सब मेरे लिए पहले दिन काम कर रहा था। – peter

+0

ठीक है, इसलिए मेरे पास विकल्प चीजें काम कर रही हैं (OPTIONS अनुरोध कर रहे हेडर को वापस करने के लिए Application_BeginRequest विधि में कुछ कोड जोड़कर)। तो उसके बाद पोस्ट तब होता है, लेकिन मुझे XMLHttpRequest से एक त्रुटि मिलती है - मूल शून्य की अनुमति नहीं है। तो ऐसा लगता है कि पोस्ट में इसका उपयोग करने वाले शीर्षलेख 'उत्पत्ति: शून्य' है, मैं इसे फिडलर में देख सकता हूं। ऐसा क्यों है? – peter

+0

यदि मैं पोस्ट ऑपरेशंस को देखता हूं जो काम करता है तो कोई मूल शीर्षलेख निर्दिष्ट नहीं होता है। जो बताता है कि यह क्यों काम करता है। – peter

1

धन्यवाद आपके उत्तर ने मुझे समस्या को हल करने के रास्ते पर रखा है।

जब मैं उस में ajax जावास्क्रिप्ट मैं उपयोग कर रहा था के साथ HTML पृष्ठ ऐक्सेस कर रहे थे,

http://localhost/file.html 

लेकिन आप जावास्क्रिप्ट इसे प्रयोग WCF सेवा तक पहुँच रहा है देखने के लिए कि,

http://192.168.54.98/JsonWCFService/Service1.svc/Post 

अगर मैं उन्हें

http://mymachinename.domain.com/JsonWCFService/Service1.svc/Post 
http://mymachinename.domain.com/file.html 

फिर यह एक विकल्प ऑपरेशन को कॉल किए बिना काम करता है ।

यह स्पष्ट नहीं करता है कि क्यों एक विकल्प और फिर क्रोम से एक पोस्ट काम नहीं करता है। क्रोम सिर्फ परिणामों को अनदेखा करता है।

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