【发布时间】:2012-02-13 03:16:46
【问题描述】:
我正在尝试使用基于 asp.net wcf 从 iPhone 构建的 Web 服务以 xml 的形式发布一些数据,但我收到错误代码 400。我检查了它的描述,从中看起来我是无法创建正确的请求。有人可以帮我纠正以下代码:
NSString *urlString = [NSString stringWithFormat:@"http://172.xxx.xxx.xxx:1230/Service.svc/updateTimesheet"];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"<TimesheetHour><ContractNote>111</ContractNote><TimesheetHourId>222</TimesheetHourId><TimesheetId>333</TimesheetId><WorkedOn>444</WorkedOn><PlacementOvertimeId>555</PlacementOvertimeId><HoursWorked>666</HoursWorked><PerformancevalueId>777</PerformancevalueId></TimesheetHour>"] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postBody];
NSHTTPURLResponse* urlResponse = nil;
NSError *error = [[NSError alloc] init];
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"Response Code: %d", [urlResponse statusCode]);
if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300) {
NSLog(@"Response: %@", result);
//here you get the response
}
EDIT1:
服务器有一个方法 updateTimesheet ,它需要一个类作为参数。请求定义为 XM,响应定义为 JSON
EDIT2:
以下是我的 wcf 服务代码:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "updateTimesheet", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
string UpdateTimesheetHours(string ts);
[数据合约] 公共课 TimesheetHour { 私人 int _TimesheetHourId; 私人 int _TimesheetId; 私人日期时间_WorkedOn; 私人 int _PlacementOvertimeId; 私人小数 _HoursWorked; 私有字符串 _contractorNote = string.Empty; 私有 int _performancevalueId = 0;
[DataMember]
public string ContractorNote
{
get { return _contractorNote; }
set { _contractorNote = value; }
}
[DataMember]
public int TimesheetHourId
{
get { return _TimesheetHourId; }
set { _TimesheetHourId = value; }
}
[DataMember]
public int TimesheetId
{
get { return _TimesheetId; }
set { _TimesheetId = value; }
}
[DataMember]
public DateTime WorkedOn
{
get { return _WorkedOn; }
set { _WorkedOn = value; }
}
[DataMember]
public int PlacementOvertimeId
{
get { return _PlacementOvertimeId; }
set { _PlacementOvertimeId = value; }
}
[DataMember]
public decimal HoursWorked
{
get { return _HoursWorked; }
set { _HoursWorked = value; }
}
[DataMember]
public int PerformancevalueId
{
get { return _performancevalueId; }
set { _performancevalueId = value; }
}
} 公共字符串 UpdateTimesheetHours(TimesheetHour 字符串) { 返回“成功”; }
EDIT3 我的 XML
<TimesheetHour>
<ContractNote>111</ContractNote>
<TimesheetHourId>222</TimesheetHourId>
<TimesheetId>333</TimesheetId>
<WorkedOn>444</WorkedOn>
<PlacementOvertimeId>555</PlacementOvertimeId>
<HoursWorked>666</HoursWorked>
<PerformancevalueId>777</PerformancevalueId>
我在服务器上调用一个函数,该函数需要一个字符串作为参数,其请求类型定义为 XML 谢谢
【问题讨论】:
-
能否包含发送到服务器的实际帖子?例如上面的代码在你的应用中运行时产生的字符串。
-
400 错误表示您的请求格式有问题。如果不知道请求应该是什么样子的详细信息(即服务器期望什么),那么很难知道你做错了什么。
-
NSLog 将您传递给服务器的内容并将其添加到您的问题中。也许到时候我们可以帮助你。
-
大家好,请检查我已经添加了我的服务的完整代码。抱歉格式化。不知道如何改正
-
@pankaj 您仍然没有告诉我们服务器的期望。人们所能做的就是猜测哪里出了问题。从服务器添加合同细节(即服务器期望什么?)
标签: iphone ios post nsurlrequest