c# - विधि पैरामीटर के साथ डब्ल्यूसीएफ webHttp बाइंडिंग त्रुटि। "अधिकांश शरीर के पैरामीटर पर रैपर तत्वों के बिना क्रमबद्ध किया जा सकता है"




wcf json (2)

अनुबंध का ऑपरेशन '' किसी भी रैपर तत्वों के बिना धारावाहिक होने के लिए एकाधिक अनुरोध निकाय पैरामीटर निर्दिष्ट करता है। अधिकांश शरीर पैरामीटर को रैपर तत्वों के बिना क्रमबद्ध किया जा सकता है। या तो अतिरिक्त निकाय पैरामीटर को हटाएं या WebGetAttribute / WebInvokeAttribute पर बॉडी स्टाइल प्रॉपर्टी को लपेटें।

मैं निम्नलिखित कॉन्फ़िगरेशन (डब्ल्यूसीएफ कॉन्फ़िगर संपादक के माध्यम से सेट) के माध्यम से JSON के साथ एक सी # 4.0 डब्ल्यूसीएफ सेवा का पर्दाफाश करने की कोशिश कर रहा हूं:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="iPhoneAPI.API">
        <endpoint address="" behaviorConfiguration="NewBehavior0" binding="webHttpBinding"
          bindingConfiguration="" contract="iPhoneAPI.IApi" />
      </service>
    </services>
    <protocolMapping>
      <add scheme="http" binding="webHttpBinding" bindingConfiguration="" />
    </protocolMapping>
    <behaviors>
      <endpointBehaviors>
        <behavior name="NewBehavior0">
          <webHttp defaultOutgoingResponseFormat="Json" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>  
</configuration>

जब मैं /API.svc तक पहुंचता हूं, तो मुझे पहले सूचीबद्ध अपवाद संदेश मिलता है।

अगर मैं केवल निम्नलिखित (पैरामीटर-कम) अनुबंध निर्दिष्ट करता हूं, तो सेवा कार्य करती है:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "test")]
GenericApiResult<IEnumerable<LiveFeedEntity>> test();

यदि मेरे पास ऐसे विधियां हैं जिनके लिए गैर-स्ट्रिंग वाले पैरामीटर की आवश्यकता है, तो मुझे पहले सूचीबद्ध अपवाद मिलता है।

उदाहरण:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "login")]
LoginApiResult Login(String UserName, String Password);

अगर मैं इस तरह के फ़ंक्शन को बदलता हूं:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "login/{UserName}/{Password}")]
LoginApiResult Login(String UserName, String Password);

यह काम करता हैं; लेकिन यह टाइप स्ट्रिंग के पैरामीटर के लिए केवल संभव है। मैं अपने अन्य कार्यों के लिए इसे कैसे हल करूं जैसे:

[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "logout")]
GenericApiResult<bool> Logout(Guid SessionKey);

बहुत सी Google खोजों का प्रयास किया, लेकिन खाली हाथ बदल दिया, किसी भी मदद की सराहना की है।

चीयर्स,

निक।



डब्ल्यूसीएफ नंगे शरीर के साथ एक से अधिक पैरामीटर का समर्थन नहीं करता है, अगर आपको एक पोस्ट विधि ऑपरेशन में कई पैरामीटर पास करने की आवश्यकता है, तो हमें BodyStyle को BodyStyle आवश्यकता है।

तो आपके मामले में आपको निम्नलिखित में अपना ऑपरेशन अनुबंध बदलना होगा:

[WebInvoke(Method = "POST", UriTemplate = "evals", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[OperationContract]
void SubmitVideoPOST(Video videoArg, string userId);

स्रोत: यहां क्लिक करें