0

我一直试图让我的 iPhone 应用程序与 WCF 服务通信。我的应用程序成功连接/找到了 Web 服务,但似乎从来没有得到非错误响应。当我使用视觉工作室 wcf 测试仪时,它工作正常。

xml格式:<mAccess><user></user><pwd></pwd></mAccess>

我的头部/身体结构有问题吗?

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:website]];
[request setHTTPMethod:@"POST"];
[request setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-type"];

NSString *soapMessage = [[NSString alloc] initWithFormat:@"<SOAP-ENV:Envelope
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"><SOAP-ENV:Body>
<MobileAccess xmlns=\"http://tempuri.org/\"><mAccess><user>user</user><pwd>pwd</pwd><custID>0</custID></mAccess>
</MobileAccess></SOAP-ENV:Body></SOAP-ENV:Envelope>"];


[request setValue:[NSString stringWithFormat:@"%d",[soapMessage length]] forHTTPHeaderField:@"Content-length"];
[request addValue:@"http://tempuri.org/IProviderDataService/MobileAccess" forHTTPHeaderField:@"Soapaction"];

[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
4

1 回答 1

1

在构建 URL 请求时存在一个潜在错误:“Content-Length”必须设置为 HTTP 正文的长度。[soapMessage length]如果将消息中的非 ASCII 字符转换为 UTF-8,这可能会有所不同。

所以你应该使用转换后的数据长度:

NSData *bodyData = [soapMessage dataUsingEncoding:NSUTF8StringEncoding];
[request setValue:[NSString stringWithFormat:@"%d",[bodyData length]] forHTTPHeaderField:@"Content-length"];
[request setHTTPBody:bodyData];
于 2012-10-22T21:08:06.913 回答