将XML从iPhone提交到.NET SOAP Web服务的问题

时间:2009-04-07 13:15:03

标签: iphone web-services soap

我的iPhone应用程序需要向现有的.NET SOAP Web服务提交一个对象,以便将其保存到数据库服务器。我认为最简单的方法是构建对象的XML表示并将其传递给Web服务。但是,这似乎不起作用。如果XML深度超过一级,则Web服务方法似乎不会被调用(Web服务方法在调用时将条目写入事件日志)。

例如,如果XML是:

<Name>Jim</Name>

调用Web服务方法,Web服务器上的事件日志中有一个条目。

如果XML是:

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

未调用Web服务方法(事件日志中没有条目)。

以下是Web服务方法定义:

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

这是我从iPhone提交的SOAP请求:

<?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>

任何人都知道为什么没有调用Web服务方法?任何人都有关于如何从iPhone应用程序向Web服务提交对象的更好/更简单的建议?

谢谢!

6 个答案:

答案 0 :(得分:2)

感谢您的回答,我最终编写了XML字符串,然后将其传递并在服务器上解码。

在我使用的iPhone上:

[xml stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]

进行编码。

在我使用的服务器上

Server.UrlDecode

进行解码。似乎到目前为止工作。

答案 1 :(得分:1)

通常认为完整的SOAP处理比iPhone和其他移动设备的资源密集程度更高,因此您直接生成所需XML的方法可能是一个很好的方法。

为了进行调试,我建议您在提交此请求时获取从服务器收到的响应XML。该响应应该为您提供有关服务器上执行的操作以及遇到的任何错误的更多信息。希望这有帮助!

答案 2 :(得分:1)

您应该使用soapUI来构建要发送到您服务的消息。然后,您将知道发送消息的格式。

答案 3 :(得分:1)

如果你必须使用SOAP(我会非常努力地使用更简单的东西),那么考虑使用WSDL2ObjC生成通信代码而不是手动滚动它:

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

答案 4 :(得分:0)

这是一个非常普遍的问题。

你说你不能从iPhone提交到.NET。但你可以从其他地方提交吗?

  • 如果你做不到,那么iPhone就不合适了,这是一个.NET问题。

  • 如果可以,请检查成功请求与iPhone制作请求之间的区别。如果iPhone产生的东西

    • 不是有效的SOAP请求:

      .NET不符合要求,这是XML序列化的一个问题。

    • 是一个有效的SOAP请求,但未被Web服务识别:

      在这种情况下,您有两个选择:

      • 将iPhone XML序列化调整为与成功的
      • 相同
      • 向.NET人员报告此问题。

      我建议同时做这两件事。

如果您的请求很简单,那么只需将其作为字符串存储在iPhone上即可。

答案 5 :(得分:0)

objective-c wrapper given here在尝试将数据发送到网络服务时效果很好。如果要将XML提交到Web服务,请将XML的内容读入NSData对象,并将该NSData作为HTTP请求的主体传递。这可以按预期工作。