2012-04-10 8 views
7

मैं एक डब्ल्यूसीएफ आरईएसटी सेवा (अजाक्स अनुरोध) को कॉल कर रहा हूं और अनुरोध एक क्रॉस डोमेन अनुरोध है।क्रॉस डोमेन jQuery अजाक्स अनुरोध और डब्ल्यूसीएफ आरईएसटी सेवा

यदि मैं एक ही डोमेन में अपनी सेवा तैनात करता हूं, तो सब कुछ क्रीम की तरह काम करता है। अंततः उत्पादन में, सेवा एक अलग डोमेन में होगी।

मैं jQuery 1.5.2 का उपयोग कर रहा हूं। मेरी सेवा का मुझे एक त्रुटि कहावत रिटर्न:

errorThrown: "jQuery15208493315000087023_1334089616458 was not called" 
textStatus: "parsererror" 

Firefox में मैं JSON मान देख सकते हैं, लेकिन निष्पादन Ajax अनुरोध की त्रुटि हैंडलर पर गिर जाता है हालांकि।

मेरे Ajax अनुरोध है: सत्य पर

function CallService() { 
    $.ajax({ 
     type: "GET", 
     url: "http://SomeService/EmpService.svc/GetValues?dv=1455", 
     contentType: "application/json; charset=utf-8", 
     dataType: "jsonp", 
     processdata: false,    
     success: function (data) { 
      ServiceSucceeded(data); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      debugger; 
      alert("Service Error"); 
      ServiceFailed(jqXHR, textStatus, errorThrown); 
     } 
    }); 
} 

WCF सेवा तरफ, मैं कॉन्फ़िगर किया है CrossDomainScriptAccess:

<webHttpBinding> 
    <binding name="webHttpBindingWithJsonP" 
      crossDomainScriptAccessEnabled="true" /> 
</webHttpBinding> 

JSON उत्तर जो मैं सर्वर से प्राप्त किया जाता है:

[{"Message": "Stop On Duty", "MessageTime": "\/Date(1334068773893-0500)\/"}, 
{"Message": "Start On Duty", "MessageTime": "\/Date(1334068763540-0500)\/"}, 
{"Message": "App_testing_4102012924am", "MessageTime": "\/Date(1334068533627-0500)\/"}, 
{"Message": "Kunal_testing_4102012924am", "MessageTime": "\/Date(1334067945510-0500)\/"}, 
{"Message": "Alert: Door Open", "MessageTime": "\/Date(1334066280963-0500)\/"}] 

क्या मुझे सेटिंग्स में कुछ भी याद आ रहा है। अगर सेवा उसी डोमेन पर ले जाया जाता है तो संपूर्ण कोड ठीक काम करता है।

मैंने इसी पोस्ट में देखा लेकिन यह काम नहीं कर सका।

+0

मुझे आशा है कि आप भी क्रॉस डोमेन नीति फ़ाइल को शामिल किया है, यहाँ की जाँच http://msdn.microsoft.com/en-us/library/cc197955%28v = बनाम.9 5% 29.aspx – Chandermani

+0

हां पहले से ही रूट –

उत्तर

5

वैसे मैंने खुद को समझ लिया। समाधान सेवा विवरण

पकड़े विन्यास फाइल को संशोधित करने के लिए था मैं स्टैंडर्ड Endpoint और कहा कि कॉन्फ़िग फ़ाइल में बाध्यकारी

<standardEndpoints> 
     <webScriptEndpoint> 
     <standardEndpoint crossDomainScriptAccessEnabled="true"> 
     </standardEndpoint> 
     </webScriptEndpoint> 
     </standardEndpoints> 



    <bindings> 

    <webHttpBinding> 
    <binding name="webHttpBindingWithJsonP" 
      crossDomainScriptAccessEnabled="true" /> 
    </webHttpBinding> 
+6

में आपके वेब.कॉन्फिग के किस अनुभाग में आपने इसे जोड़ा है? –

+0

@ matthew_360 टैग के अंतर्गत जो पैरेंट <कॉन्फ़िगरेशन> टैग –

+0

के अंतर्गत है, हम "क्रॉस डोमेन" पहुंच को अनुमति देने के लिए कॉन्फ़िगरेशन में विशिष्ट डोमेन कैसे निर्दिष्ट कर सकते हैं? – Virus

2

मैं भी पाने के लिए <webHttpEndpoint> जोड़ने के लिए की जरूरत है यह काम:

<standardEndpoints> 
    <webHttpEndpoint> 
     <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint> 
    </webHttpEndpoint> 
    <webScriptEndpoint> 
     <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint> 
    </webScriptEndpoint> 
</standardEndpoints> 

<bindings> 
    <webHttpBinding> 
     <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" /> 
    </webHttpBinding> 
</bindings> 
+0

मैं आपके क्लीनर स्वरूपण की सराहना करता हूं –

0
[OperationContract] 
    [WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, RequestFormat=WebMessageFormat.Json, 
    UriTemplate = "GetEmployeeJson")] 
    List<EmployeeData> GetEmployeeJson(); 

Web.config

<bindings> 
     <webHttpBinding> 
      <binding name="webHttpBindingWithJsonP" 
        crossDomainScriptAccessEnabled="true" /> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="WcfExample.Service1Behavior"> 
       <serviceMetadata httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
      <behavior name="WebBehavior"> 
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="WcfExample.Service1Behavior" name="WcfExample.Service1"> 
      <endpoint address="" binding="webHttpBinding" contract="WcfExample.IService1" bindingConfiguration="webHttpBindingWithJsonP" behaviorConfiguration="WebBehavior" /> 
     </service> 
    </services> 

WCF सेवा करने के लिए

jQuery AJAX कॉल

$.ajax({ 
      type: "GET", 
      contentType: "application/javascript", 
      crossDomain: true, 
      dataType: 'jsonp', 
      cache: true, 
      url: 'http://localhost:49349/Service1.svc/GetEmployeeJson', 
      success: function (data) { 
       var html = []; 

       alert(data[0].lastname); 


       $.each(data, function (index, value) { 
        $("#TableID").append("<tr><td>" + value.HREmpId + "</td><td>" + value.firstName + "</td><td>" + value.lastname + "</td><td>" + value.address + "</td><td>" + value.city + "</td></tr>"); 

       }); 


      }, 

      error: function (xhr, ajaxOptions, thrownError) { 
       alert("here error"); 
       alert(thrownError); 
       if (xhr != null) { 

        var err = JSON.parse(xhr.responseText); //you can throw a code-behinde Exception and it will automatically             //render to a valid JSON string when we rerieve the responseText 
        alert("ErrorMessage: " + err.Message + " StackTrace: " + err.StackTrace); 

       } 
      } 
     });