2012-07-10 20 views
6

मेरे पास OperationContract विधि है जहां मैं क्वेरी करने और डेटाबेस में डेटा डालने का प्रयास कर रहा हूं। मैं POST विधि का उपयोग कर रहा हूं और ब्राउज़र में जावास्क्रिप्ट से सेवा को कॉल कर रहा हूं। डब्ल्यूसीएफ सेवा एक ही डोमेन में है, इसलिए मुझे JSONP का उपयोग नहीं करना चाहिए। मैं डेटा संशोधित कर रहा हूं इसलिए यह POST अनुरोध होना चाहिए GET अनुरोध नहीं। हालांकि मुझे अभी भी "विधि को त्रुटि की अनुमति नहीं है" मिल रहा है। क्या किसी ने इस स्थिति का सामना किया है?WCF WebInvoke POST - विधि को अनुमति नहीं मिली

मेरी सेवा

http://some_url.com/services/ProfileService.svc/json/CurrentUser 

अजीब पर बुलाया जा रहा है, यह एक GET अनुरोध के माध्यम से नाम से जाना जब मैं इस यूआरएल जाना भले ही मैं एक POST specifiy लगता है। पेज लोड पर, हालांकि, यह POST अनुरोध का प्रयास कर रहा है।

ब्राउज़र प्रतिक्रिया यूआरएल के लिए जा रहा है जब:

Request URL:http://some_url.com/services/ProfileService.svc/json/CurrentUser 
Request Method:GET 
Status Code:405 Method Not Allowed 
Request Headersview parsed 
GET /services/ProfileService.svc/json/CurrentUser HTTP/1.1 

यहाँ मेरी विधि है कि मैं फोन करने के लिए कोशिश कर रहा हूँ है:

[OperationContract] 
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)] 

public HIPUser GetCurrentUser() 
{ 
    string[] domainUser; 
    string Auth_User = HttpContext.Current.User.Identity.Name.ToString().ToLower(); 
    domainUser = Auth_User.Split('\\'); 
    string user = domainUser[1]; 
    Debug.WriteLine(user); 

    ProfileManager pm = new ProfileManager(); 
    var results = pm.GetUserByUserName(user); 

    if (results.Length > 0) 
    { 
     return results.First(); 
    } 
    else 
    { 
     Debug.WriteLine("IS NULL"); 
     var x = pm.CreateUser(user, null, null); 
     Debug.WriteLine(x.UserName); 
     return x; 
    } 
} 

ग्राहक:

function getCurrentUser() { 

$.ajax({ 
    type: "POST", 
    url: "services/ProfileService.svc/json/GetCurrentUser", 
    contentType: "application/json; charset=utf-8", 
    data: null, 
    dataType: "json", 
    error: function (request, error, u) { 
     alert('blargherror: ' + error); 
    }, 
    success: function (result, status) { 
     alert(result.d); 
    } 
}); 
} 

सुनिश्चित नहीं हैं कि अगर जरूरत लेकिन Web.Config:

<behaviors> 
    <endpointBehaviors> 
     <behavior name="jsonBehavior"> 
      <enableWebScript /> 
     </behavior> 
    </endpointBehaviors> 

    <serviceBehaviors> 
     <behavior name="metaBehavior"> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

<serviceHostingEnvironment 
    aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 

<services> 
    <service name="ProfileService" behaviorConfiguration="metaBehavior"> 
     <endpoint address="/json" 
      behaviorConfiguration="jsonBehavior" 
      binding="webHttpBinding" 
      bindingConfiguration="secure" 
      contract="ProfileService" /> 
     <endpoint address="" 
      binding="basicHttpBinding" 
      bindingConfiguration="secure" 
      contract="ProfileService" /> 
    </service> 
</services> 

Web.Config के लिए संपादित करें - जोड़ना बाइंडिंग

<bindings> 
     <webHttpBinding> 
      <binding name="secure"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows"/> 
       </security> 
      </binding> 
     </webHttpBinding> 
     <basicHttpBinding> 
      <binding name="secure"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
+2

यह आपकी समस्या का समाधान नहीं करेगा, लेकिन शून्य के बजाए डेटा के रूप में '{{" "पास करने के लिए यह एक अच्छा अभ्यास है (http://encosia.com/3-mistakes-to-avoid-when-using-jquery -with-aspnet-ajax /) – Jupaol

+0

लेख के लिए धन्यवाद! – jocey

+2

मुझे आपके कोड में कुछ भी गलत नहीं मिल रहा है, मैंने अभी एक ही कॉन्फ़िगरेशन के साथ एक समान सेवा बनाई है और यह सही तरीके से काम करता है, केवल अंतर ही बाध्यकारी कॉन्फ़िगरेशन = "सुरक्षित" है, मुझे लगता है कि आपने सुरक्षा कारणों से उस बाध्यकारी को पोस्ट नहीं किया है, ठीक है अगर आप पोस्ट कर सकते हैं तो यह उपयोगी होगा। क्या आपने उस बाध्यकारी विन्यास को हटाने की कोशिश की है और देखें कि क्या आप अपनी सेवा तक पहुंच सकते हैं ?? – Jupaol

उत्तर

1

मैं यह पता लगा सकता था। रिटर्न ऑब्जेक्ट एक अज्ञात प्रकार के साथ एक मुद्दा था, इसलिए इसे JSON ऑब्जेक्ट में क्रमबद्ध करने में सक्षम नहीं था। यह सुनिश्चित नहीं था कि ऑब्जेक्ट को मेरी विधि के साथ काम करने के लिए क्रमबद्ध कैसे करें, इसलिए मैंने अपनी खुद की कस्टम JSON स्ट्रिंग का निर्माण करने वाली स्ट्रिंग को वापस करने के लिए विधि को बदल दिया और eval() फ़ंक्शन का उपयोग करके इसे JSON ऑब्जेक्ट में बदलने के लिए किया।

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