Как отправить массив в качестве параметра в веб-сервис, используя SOAP и цель C - PullRequest
1 голос
/ 09 апреля 2010

Я работаю в приложении для iPhone, которому нужно отправить массив в качестве параметра, используя SOAP. это текущий запрос и соединение:

NSString *soapMessage = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
        "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
     "<soap:Body>\n"
     "<function xmlns=\"http://tempuri.org/\" />\n"
     "</soap:Body>\n"
     "</soap:Envelope>\n"];

        NSURL *url = [NSURL URLWithString:@"http://myHost.com/myWebService/service.asmx"]; //the url to the WSDL

        NsMutableURLRequest theRequest = [[NSMutableURLRequest alloc] initWithURL:url];
     NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]];

     [theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
     [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Lenght"];
     [theRequest setHTTPMethod:@"POST"];
     [theRequest addValue:@"myhost.com" forHTTPHeaderField:@"Host"];
     [theRequest addValue:@"http://tempuri.org/function" forHTTPHeaderField:@"SOAPAction"];
     [theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
     theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

Теперь, чтобы отправить параметры, я посмотрел на WSDL описания функции для ввода:

    <s:complexType name="ArrayOfDictionaryEntry">
            <s:sequence>
              <s:element minOccurs="0" maxOccurs="unbounded" name="DictionaryEntry" type="tns:DictionaryEntry" />
            </s:sequence>
          </s:complexType>
          <s:complexType name="DictionaryEntry">
            <s:sequence>
              <s:element minOccurs="0" maxOccurs="1" name="Key" />
              <s:element minOccurs="0" maxOccurs="1" name="Value" />
            </s:sequence>
</s:complexType>

<s:element name="functionInput">
        <s:complexType />
      </s:element>

Полагаю, мне нужно создать массив словарных статей. я хотел бы отправить что-то вроде этого

[ location => USA, 
  module => DEVELOPMENT]

Но я немного растерялся.

  • массив создается вне SOAP, как NSArray или внутри SOAPMessage
  • если так ... Как это делается?
  • и DictionaryEntry, я должен сделать класс?

спасибо за ваше время n.n

Ответы [ 2 ]

2 голосов
/ 09 апреля 2010

Итак, ваш xml должен выглядеть так: -

 <ArrayOfDictionaryEntry>
      <DictionaryEntry>
         <key>key1</key>
         <value>val1</value>
      </DictionaryEntry>
      <DictionaryEntry>
          <key>key2</key>
          <value>val2</value>
       </DictionaryEntry>
   <ArrayOfDictionaryEntry>

Я бы создал объект NSMutableDictionary со всеми парами ключ-значение, а затем перебрал их и собрал xml.

0 голосов
/ 15 апреля 2010

Спасибо ... Я наконец-то подключился к веб-сервису, отправив параметры ... Похоже, что человек, ответственный за настройку веб-службы, на самом деле не внес изменений, чтобы я мог отправить параметры ..

WSDL теперь выглядит так:

 <s:element name="GetMonitorList">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="location" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="moduleName" type="s:string" />
          </s:sequence>
        </s:complexType>

И мой код выглядит так:

@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
    "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
    "<soap:Body>\n"
     "<function xmlns=\"http://tempuri.org/\">\n"
    "<location>USA</location>"
    "<moduleName>DEVELOPMENT</moduleName>"
    "</function>"
    "</soap:Body>\n"
    "</soap:Envelope>\n"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...