2012-08-16 12 views
7

मेरे पास एक पूर्णांक के साथ एक एएसपीनेट webservice कॉल है। हमारे विरासत एप्लिकेशन पर जो .NET 4.0 को पोर्ट किया गया था, मुझे यह कॉल काम पर नहीं मिल सकती है। मैं एक तरीका है जिसके कोई पैरामीटर लेकिन वेब विधि को डाटा भेजने निम्नलिखित त्रुटि देता है कॉल कर सकते हैं:एएसपीनेट एएसएमएक्स वेब सेवा फेंकने के लिए jQuery अजाक्स अनुरोध प्रारूप अमान्य है: एप्लिकेशन/जेसन

System.InvalidOperationException: Request format is invalid: application/json; charset=UTF-8. 
at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

मैं एक खाली परियोजना में बिल्कुल एक ही कोड बनाया है और यह ठीक काम किया। मैं web.config में कुछ भी नहीं देख सका कि रिक्त प्रोजेक्ट ने जोड़ा जो इससे फर्क पड़ेगा।

jQuery कोड

$.ajax({ 
    type: "POST", 
    url: "/WebService1.asmx/Test", 
    data: JSON.stringify({"code": 1234}), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     alert(msg); 
    } 
}); 

मेरे वेब सेवा कोड

<ScriptService()> _ 
<WebService(Namespace:="http://tempuri.org/")> _ 
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<ToolboxItem(False)> _ 
Public Class WebService1 
    Inherits WebService 

    <WebMethod()> 
    Public Function Test(ByVal code As Integer) As String 
     Return "success" 
    End Function 

    <WebMethod()> 
    Public Function Hello() As String 
     Return "hello" 
    End Function  
End Class 

वेब कॉन्फ़िग

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <appSettings> 
    </appSettings> 
    <connectionStrings> 
    </connectionStrings> 
    <system.web> 
     <httpRuntime enableVersionHeader="false" /> 
     <httpCookies httpOnlyCookies="true" requireSSL="false" lockItem="true" /> 
     <trace enabled="false" pageOutput="true" requestLimit="40" localOnly="true"/> 

     <httpModules> 
     </httpModules> 
     <compilation debug="true" strict="true" explicit="true" targetFramework="4.0"> 

     </compilation> 
     <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"> 
     </pages> 

     <authentication mode="Forms"> 

     <httpHandlers>  
     </httpHandlers> 
    </system.web> 

    <system.webServer> 

    <validation validateIntegratedModeConfiguration="false" /> 
    <modules> 
    </modules> 
    <handlers> 
    </handlers> 
    <httpErrors errorMode="Custom" > 
    </httpErrors> 
    </system.webServer> 
</configuration> 
+0

क्या आप अपनी web.config फ़ाइल पोस्ट कर सकते हैं? मुझे पता है कि समस्या कहां है, जवाब देने से पहले मुझे केवल एक पुष्टिकरण की आवश्यकता है। –

+0

@DarinDimitrov मैंने web.config जोड़ा है लेकिन संवेदनशील विवरण हटा दिया है – skyfoot

उत्तर

10

DOH, मैं गलत web.config में काम कर रहा था।

SO पर बहुत से प्रश्नों की तरह समाधान निम्नलिखित को जोड़ना था।

<system.webServer> 
     <handlers> 
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </handlers> 
    </system.webServer> 
+0

धन्यवाद। मेरी समस्या हल लेकिन क्या आप समझा सकते हैं कि यह क्या करता है। मेरे मामले में यह एक मशीन के लिए विशिष्ट है। कोई विचार क्या कारण हो सकता है? और अगर मैं अपनी कॉन्फ़िगरेशन फ़ाइल को बदलना नहीं चाहता तो समाधान क्या हो सकता है क्योंकि यह अन्य मशीन पर ठीक काम करता है। – Akie

+0

खुशी है कि आप गलत web.config में काम कर रहे थे और प्रश्न और उत्तर पोस्ट किया था। यह मुझे बहुत समय बचाया। –

+0

@ एकी मुझे भी यकीन नहीं है, लेकिन मैं आपको क्या बता सकता हूं ScriptHandlerFactory आपके वेबस्वाइसेस को आपके जावास्क्रिप्ट कोड में संकलित समय के संदर्भ के रूप में जोड़ देगा। इसका अर्थ यह है कि आप जावास्क्रिप्ट में वाक्यविन्यास 'namepace.class.method' के माध्यम से सीधे अपने वेब सेवा में वेबमाइड्स पर कॉल करने में सक्षम हैं। हालांकि, यह वह जगह है जहां मैं उलझन में हूं, इसलिए मैं इसके बारे में कोई जवाब नहीं दे सकता। –

9

मैं एक ही समस्या है और इस आदेश चलाकर समाप्त ...

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe -i 

नोट है कि आप इसे काम करने के लिए प्रशासक मोड में अपने कमांड प्रॉम्प्ट की आवश्यकता होगी था।

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