Ошибка отправки XML с iPhone в веб-службу .NET SOAP - PullRequest
1 голос
/ 07 апреля 2009

Моему приложению iPhone необходимо отправить объект в уже существующую веб-службу .NET SOAP, чтобы его можно было сохранить на сервере базы данных. Я подумал, что самый простой способ сделать это - создать XML-представление объекта и передать его веб-службе. Тем не менее, это не похоже на работу. Если XML более чем на один уровень, метод веб-службы, по-видимому, не вызывается (метод веб-службы записывает запись в журнал событий при его вызове).

Например, если XML:

<Name>Jim</Name>

Метод веб-службы вызывается, и в журнале событий на веб-сервере есть запись.

Если XML:

<Person><Name>Jim</Name></Person>

Метод веб-службы не вызывается (в журнале событий нет записи).

Вот определение метода веб-службы:

public string SubmitiPhoneObject(string theObjectAsXml) {
    WriteToEventLog("Begin Service.SubmitiPhoneObject");
    // Do some work…
}

А вот запрос SOAP, который я отправляю с iPhone:

<?xml version="1.0" encoding="utf-8"?>
<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/">
<soap:Body>
    <SubmitiPhoneObject xmlns="http://www.myServer.com/iPhoneService/">
        <theObjectAsXml>
            <TheObject>
                <PersonID>5263</PersonID>
                <DepartmentID>379</DepartmentID>
            </TheObject>
        </theObjectAsXml>
    </SubmitiPhoneObject>
</soap:Body>

Кто-нибудь знает, почему не вызывается метод веб-службы? У кого-нибудь есть лучшие / более простые предложения о том, как отправить объект в веб-сервис из приложения iPhone?

Спасибо!

Ответы [ 6 ]

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

Спасибо за ответы, я закончил кодировать строку XML, прежде чем передать ее и расшифровать на сервере.

На iPhone я использовал:

[xml stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]

для кодирования.

А на сервере я использовал

Server.UrlDecode

чтобы сделать декодирование. Кажется, до сих пор работает.

1 голос
/ 07 апреля 2009

Если вам нужно использовать SOAP (и я бы очень настаивал на том, чтобы использовать что-то попроще), тогда рассмотрите возможность использования WSDL2ObjC для генерации кода связи вместо того, чтобы вручную его обрабатывать:

http://code.google.com/p/wsdl2objc/

1 голос
/ 07 апреля 2009

Вы должны использовать soapUI , чтобы общаться и создавать сообщения для отправки серверу. Затем вы узнаете, в каком формате отправлять сообщения.

1 голос
/ 07 апреля 2009

Полная обработка SOAP обычно считается более ресурсоемкой, чем идеальная для iPhone и других мобильных устройств, поэтому ваш подход к генерации необходимого вам XML-кода, вероятно, является хорошим.

Для отладки я бы порекомендовал получить XML-ответ, который вы получаете с сервера при отправке этого запроса. Этот ответ должен дать вам больше информации о том, что было сделано на сервере и обо всех обнаруженных ошибках. Надеюсь, это поможет!

0 голосов
/ 08 апреля 2009

Оболочка jective-c, указанная здесь , прекрасно работает при попытке отправить данные в веб-сервис. Если вы хотите отправить XML в веб-службу, прочитайте содержимое XML в объект NSData и передайте эти NSData в качестве тела вашего HTTP-запроса. Это работает как ожидалось.

0 голосов
/ 07 апреля 2009

Это слишком общий вопрос.

Вы говорите, что не можете отправить с iPhone в .NET. Но вы можете отправить из другого места?

  • Если вы не можете, то iPhone выпадает из уравнения, и это проблема .NET.

  • Если вы можете, тогда проверьте, в чем разница между успешным запросом и запросом, сделанным iPhone. Если iPhone производит что-то, что

    • не является действительным запросом SOAP:

      .NET выпадает из уравнения, и это проблема с вашей сериализацией XML.

    • является действительным запросом SOAP, но не распознается веб-службой:

      В этом случае у вас есть два варианта:

      • настроить сериализацию XML для iPhone таким же образом, как и успешную
      • сообщить о проблеме людям .NET.

      Я предлагаю сделать оба.

Если ваш запрос прост, то сохранение его в виде строки на iPhone может быть приемлемым вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...