0

我正在尝试将针对 C# 编写的肥皂查询转换为 Visual C++ 中的 gSoap 查询。

C# 查询将 XML 节点添加到查询调用中,以便将参数传递给查询:

XmlNode queryOpts = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");
queryOpts.InnerXml = "<DateInUtc>TRUE</DateInUtc>";

这是 C# 查询,传递各种参数(一些参数被指定为 XmlNode 对象)

XmlNode nodeListItems = listService.GetListItems("Announcements", null, query, viewFields, null, queryOpts, null);

C++ / gSoap 查询允许我传递查询和响应对象:

listService.__ns10__GetListItems(&announcementQuery, &announcementResponse)

查询对象具有可以设置的与 C# 调用中的参数相关的各种属性:

announcementQuery.listName  
announcementQuery.query   
announcementQuery.queryOptions 
announcementQuery.viewFields 

第一个参数有一个字符串,没问题。

查询、queryOptions 和 viewFields 有点混乱。

"query" 是一个 _ns2__GetListItems_query 类型的类,它有以下函数和成员:

soap_default()
soap_get()
soap_in()
soap_out()
soap_put()
soap_serialize()
soap_type()
__any
__mixed

对于查询、queryOptions 和 viewFields,我只想指定一个 xml 格式的字符串,就像 C# 代码一样,但我不确定这是如何完成的。

有人可以对此发表一些经验吗?

谢谢!

4

1 回答 1

0

我假设您已经找到了答案,但我会为后代发布一些注释。

这是一个简单的 C++ 演示,用于将 XML 文档发送到 ASP.NET Web 方法。

int _tmain(int argc, _TCHAR* argv[])
{
    Service1SoapProxy proxy;

    _WebServiceNS1__HelloWorld helloWorld;
    _WebServiceNS1__HelloWorld_xml xml;
    _WebServiceNS1__HelloWorldResponse response;

    xml.__any = "<doc><x>hi</x></doc>";
    helloWorld.xml = &xml;

    int result = proxy.HelloWorld(&helloWorld, &response);
    fprintf(stdout, "result: %i\n", result);

    switch(result)
    {
        case SOAP_OK:
            fprintf(stdout, "Response: %s\n", response.HelloWorldResult);
            break;
        default:
            break;
    }

    return 0;
}

这是 .NET 服务中的简单 Web 方法:

[WebMethod]
public string HelloWorld(XmlNode xml)
{
    return string.Format("Your XML: {0}", xml.OuterXml);
}

如果一切正常,您将在控制台上看到“Response: hi”。

于 2011-06-29T04:13:44.577 回答