我正在尝试从Microsoft Project Server Project Web服务检索项目信息。
我使用gSOAP来实现客户端。以下是我的代码的样子:
if ( project.ReadProjectStatus(&read_project_status_message, &read_project_status_response) == SOAP_OK )
{
ofstream project_info("C:\\PROJECTINFO.XML");
project_info << read_project_status_response.ReadProjectStatusResult->__any;
}
虽然项目服务器的响应如下:
<soap:Envelope ...>
<soap:Body ...>
<ReadProjectStatusResponse ...>
<ReadProjectStatusResult>
<xs:schema ...>
...
</xs:schema ...>
<diffgr:diffgram ...>
<ProjectDataSet ...>
....
</ProjectDataSet>
</diffgr:diffgram>
</ReadProjectStatusResult>
</ReadProjectStatusResponse>
</soap:Body>
</soap:Envelope>
当我打开文件PROJECTINFO.XML(其中写入read_project_status_response.ReadProjectStatusResult-&gt; __ any)时,我只能看到
<xs:schema ...>
...
</xs:schema>
一部分。没有关于项目信息。
任何人都知道为什么会这样,以及我如何使用gsoap检索项目状态信息?
提前致谢。
答案 0 :(得分:0)
太晚了,但是这里......
项目服务器提供的wsdl不完整。它看起来像这样。
<s:element name="ReadProjectStatusResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ReadProjectStatusResult">
<s:complexType>
<s:sequence>
<s:any namespace="http://schemas.microsoft.com/office/project/server/webservices/ProjectDataSet/" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
将其更改为以下内容(注意s:any之前的额外s:元素)并使用gsoap重新编译。现在gsoap将创建2个成员变量(xsd__schema和__any)。 xsd__schema将包含架构,__ any将包含正确的数据。
<s:element name="ReadProjectStatusResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ReadProjectStatusResult">
<s:complexType>
<s:sequence>
<s:element ref="s:schema"/>
<s:any namespace="http://schemas.microsoft.com/office/project/server/webservices/ProjectDataSet/" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>