“请求格式无效”

时间:2012-11-21 11:54:36

标签: c# objective-c http webserver webmethod

尝试连接到以下Web方法时,将返回“请求格式无效”:

public string myWebMethod(string test)
{
    return "connected";
}

这是目标C代码:

NSString *seshID = @"test-session";       
NSString *post = [NSString stringWithFormat:@"test=%@", seshID];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSString *comparisonURLString = SERVER_COMPARE_URL_STRING;
NSURL *comparisonURL = [NSURL URLWithString: comparisonURLString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:comparisonURL];

[request setHTTPMethod:@"POST"];
[request addValue:postLength forHTTPHeaderField:@"Content-Length"];

NSHTTPURLResponse *urlResponse = nil;
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];

NSString *response = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];    
NSLog(response);

但是,如果我改变了web方法,那么它不需要参数:

public string myWebMethod()

并将我的obj-c代码中的相应行更改为:

NSString *post = [NSString stringWithFormat:@""];

它有效,响应:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">connected</string>

任何人都可以解释为什么后者似乎有效但前者不行?感谢。

1 个答案:

答案 0 :(得分:1)

我在JAVA WebMethod和C#之间遇到了类似的问题。通过从SoapHeader创建一个类字符串1 inherant并包含字符串[]来解决该问题。

然后,对于您的示例,您可以尝试此

public string myWebMethod(string[] test)
{
    return "connected";
}

public string myWebMethod(char[] test)
{
    return "connected";
}

您也可以通过Fiddler查看实际传递的数据类型。