2012-04-01 9 views
5

में किसी JSON वेब सेवा में पैरामीटर पास करना मैं एक webservice विधि को कॉल करने और इसे पैरामीटर पास करने का प्रयास कर रहा हूं।उद्देश्य सी

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public void GetHelloWorld() 
    { 
     Context.Response.Write("HelloWorld"); 
     Context.Response.End(); 
    } 

    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public void GetHelloWorldWithParam(string param) 
    { 
     Context.Response.Write("HelloWorld" + param); 
     Context.Response.End(); 
    } 

यहाँ मेरी उद्देश्य सी कोड है::

NSString *urlString = @"http://localhost:8080/MyWebservice.asmx/GetHelloWorld"; 
NSURL *url = [NSURL URLWithString:urlString]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
[request setHTTPMethod: @"POST"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 

NSError *errorReturned = nil; 
NSURLResponse *theResponse =[[NSURLResponse alloc]init]; 
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned]; 
if (errorReturned) 
{ 
    //...handle the error 
} 
else 
{ 
    NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", retVal); 
    //...do something with the returned value   
} 

तो जब मैं GetHelloWorld फोन यह बहुत अच्छा काम करता है और:

यहाँ मेरी वेब सेवा तरीकों है

NSLog(@"%@", retVal); 

प्रदर्शन HelloWorld , लेकिन मैं GetHelloWorldWithParam कैसे कॉल करूं? पैरामीटर कैसे पास करें?

मैं के साथ प्रयास करें:

NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:@"myParameter" forKey:@"param"];  
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error]; 

और अनुरोध करने के लिए दो निम्न पंक्तियां जोड़ें:

System.InvalidOperationException: Missing parameter: test. 
    at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection) 
    at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 
    at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

आपकी मदद के लिए धन्यवाद:

[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody: jsonData]; 

मैं त्रुटि है! टेडी

उत्तर

2

से सजाया गया है मैंने आपके कोड का उपयोग किया है और थोड़ा सा संशोधित किया है। (लाइन NSError *errorReturned = nil से शुरू)

NSString *urlString = @"http://localhost:8080/MyWebservice.asmx/GetHelloWorldWithParam"; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod: @"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    NSString *myRequestString = @"param="; // Attention HERE!!!! 
    [myRequestString stringByAppendingString:myParamString]; 
    NSData *requestData = [NSData dataWithBytes:[myRequestString UTF8String] length:[myRequestString length]]; 
    [request setHTTPBody: requestData]; 

बाकी हिस्सा अपने कोड के साथ एक ही है: पहला निम्नलिखित का प्रयास करें।

अब सामान्यतः, यह कोड काम करना चाहिए। लेकिन अगर आपने नीचे web.config में संशोधन नहीं किया है, तो यह नहीं होगा।

जांच करें कि आपके web.config फ़ाइल निम्नलिखित लाइनों में शामिल हैं:

<configuration> 
    <system.web> 
    <webServices> 
     <protocols> 
      <add name="HttpGet"/> 
      <add name="HttpPost"/> 
     </protocols> 
    </webServices> 
    </system.web> 
</configuration> 

मैं इसे इस तरह से हल कर लिया है, आशा है कि यह आप के लिए भी काम करता है।

आप और अधिक जानकारियां की जरूरत है, इन 2 निम्नलिखित प्रश्न देखें:
. Add key/value pairs to NSMutableURLRequest
. Request format is unrecognized for URL unexpectedly ending in

+0

अरे, आपको बहुत धन्यवाद, यह समाधान है। मैं param को भूल गया ... मेरे web.config पहले से ही इन लाइनों था। – user1306602

1

मैन्युअल रूप से प्रतिक्रिया स्ट्रीम पर नियंत्रण न लें। बस एक छोटे से नीचे के रूप में अपने वेब सेवा पद्धति को बदलने:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetHelloWorld() 
{ 
    return "HelloWorld"; 
} 

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetHelloWorldWithParam(string param) 
{ 
    return "HelloWorld" + param; 
} 

सुनिश्चित करें कि आप [ScriptMethod(ResponseFormat = ResponseFormat.Json)] जोड़ने अगर आप केवल बदले में Json की पेशकश करने के लिए प्रेरित करें। लेकिन अगर आप इसे नहीं जोड़ते हैं, तो आपकी विधि एक्सएमएल और जेसन दोनों अनुरोधों को संभालने में सक्षम होगी।

पीएस सुनिश्चित करें कि आपकी वेब सेवा कक्षा [ScriptService]

+0

ठीक है धन्यवाद, मैं नीचे समाधान के साथ मेरी समस्या का समाधान करें। मैं Context के बजाय बस लौटने की कोशिश करूंगा। Reesponse.Write (... – user1306602