将 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 文档