将 SOAP 请求转换为 iOS soap 消息
convert SOAP request to iOS soap message
我一直在处理 SOAP 请求并使用 SOAPUI
进行了测试,它运行良好。但是当包含在 iOS 中的 SOAPMEASSAGE
并测试它时,我在响应中收到错误并且无法解析数据
工作要求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:prod="http://schemas.datacontract.org/2004/07/ProdigyDAL.Model.Search">
<soapenv:Header/>
<soapenv:Body>
<tem:GetLatestNews>
<!--Optional:-->
<tem:websiteID>1</tem:websiteID>
<!--Optional:-->
<tem:languageID>2</tem:languageID>
<!--Optional:-->
<tem:categoryID>105</tem:categoryID>
<!--Optional:-->
<tem:currentNewsUniqueName>0</tem:currentNewsUniqueName>
<!--Optional:-->
<tem:pageInfo>
<!--Optional:-->
<prod:PageNumber>0</prod:PageNumber>
<!--Optional:-->
<prod:PageSize>3</prod:PageSize>
<!--Optional:-->
<prod:TotalRowCount>0</prod:TotalRowCount>
</tem:pageInfo>
</tem:GetLatestNews>
</soapenv:Body>
</soapenv:Envelope>
我的肥皂消息
NSString *soapMessage = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>""<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\" xmlns:prod=\"http://schemas.datacontract.org/2004/07/ProdigyDAL.Model.Search/\">"
"<soapenv:Header/>"
"<soapenv:Body>"
"<GetLatestNews>"
"<websiteID>1</websiteID>"
"<languageID>2</languageID>"
"<categoryID>105</categoryID>"
"<currentNewsUniqueName>0<currentNewsUniqueName>"
"<pageInfo><a:PageNumber>0</a:PageNumber><a:PageSize>3</a:PageSize><a:TotalRowCount>0</a:TotalRowCount></pageInfo>"
"</GetLatestNews>"
"</soapenv:Body>"
"</soapenv:Envelope>"];
NSURL *url = [NSURL URLWithString:@"http://demoserver.tacme.net:3030/xxxxx/xxxxx/xxxxxx.svc"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
[theRequest addValue: @"demoserver.tacme.net:3030" forHTTPHeaderField:@"Host"];
[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue: @"http://tempuri.org/xxxxxx/xxxxxxx" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
你能指教一下,我的信息有什么问题吗?
您的 soapMessage 中有很多问题
1. <soapenv:Envelope ..> but closing tag is </soap:Envelope>
2. There is no tag <xmlns:prod... these are parameters of <soapenv:Envelope..
3. etc... (another mismatches)
底线:制作与您的工作要求完全相同
//Put somewhere in your code
NSLog("%@",soapMessage);
复制并粘贴到文件中,例如request.xml
然后在终端
xmllint --format request.xml
并查看它是否是有效的 XML 文档
我一直在处理 SOAP 请求并使用 SOAPUI
进行了测试,它运行良好。但是当包含在 iOS 中的 SOAPMEASSAGE
并测试它时,我在响应中收到错误并且无法解析数据
工作要求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:prod="http://schemas.datacontract.org/2004/07/ProdigyDAL.Model.Search">
<soapenv:Header/>
<soapenv:Body>
<tem:GetLatestNews>
<!--Optional:-->
<tem:websiteID>1</tem:websiteID>
<!--Optional:-->
<tem:languageID>2</tem:languageID>
<!--Optional:-->
<tem:categoryID>105</tem:categoryID>
<!--Optional:-->
<tem:currentNewsUniqueName>0</tem:currentNewsUniqueName>
<!--Optional:-->
<tem:pageInfo>
<!--Optional:-->
<prod:PageNumber>0</prod:PageNumber>
<!--Optional:-->
<prod:PageSize>3</prod:PageSize>
<!--Optional:-->
<prod:TotalRowCount>0</prod:TotalRowCount>
</tem:pageInfo>
</tem:GetLatestNews>
</soapenv:Body>
</soapenv:Envelope>
我的肥皂消息
NSString *soapMessage = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>""<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\" xmlns:prod=\"http://schemas.datacontract.org/2004/07/ProdigyDAL.Model.Search/\">"
"<soapenv:Header/>"
"<soapenv:Body>"
"<GetLatestNews>"
"<websiteID>1</websiteID>"
"<languageID>2</languageID>"
"<categoryID>105</categoryID>"
"<currentNewsUniqueName>0<currentNewsUniqueName>"
"<pageInfo><a:PageNumber>0</a:PageNumber><a:PageSize>3</a:PageSize><a:TotalRowCount>0</a:TotalRowCount></pageInfo>"
"</GetLatestNews>"
"</soapenv:Body>"
"</soapenv:Envelope>"];
NSURL *url = [NSURL URLWithString:@"http://demoserver.tacme.net:3030/xxxxx/xxxxx/xxxxxx.svc"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
[theRequest addValue: @"demoserver.tacme.net:3030" forHTTPHeaderField:@"Host"];
[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue: @"http://tempuri.org/xxxxxx/xxxxxxx" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
你能指教一下,我的信息有什么问题吗?
您的 soapMessage 中有很多问题
1. <soapenv:Envelope ..> but closing tag is </soap:Envelope>
2. There is no tag <xmlns:prod... these are parameters of <soapenv:Envelope..
3. etc... (another mismatches)
底线:制作与您的工作要求完全相同
//Put somewhere in your code
NSLog("%@",soapMessage);
复制并粘贴到文件中,例如request.xml 然后在终端
xmllint --format request.xml
并查看它是否是有效的 XML 文档