gSOAP不会从Web服务返回信息,但只返回架构

时间:2011-06-14 16:20:44

标签: web-services soap gsoap project-server

我正在尝试从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检索项目状态信息?

提前致谢。

1 个答案:

答案 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>