1

我正在尝试从 .NET 4.5 中的客户端应用程序调用 Sharepoint 2010 搜索 Web 服务,我毫无问题地添加了服务引用,我修改了 web.config 以允许正确的身份验证(NTLM)但是当我调用 Query 方法时,我得到了500 服务器错误消息:

服务器无法处理请求。---> HRESULT 异常:0x80131904 --->; HRESULT 异常:0x80131904

我已经尝试了几件事,而我的发现真的让我很困惑:

使用 Fiddler 分析请求时,这里是失败的请求(只是正文部分):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <Query xmlns="urn:Microsoft.Search">
               <queryXml>&lt;QueryPacket xmlns='urn:Microsoft.Search.Query'&gt;&lt;Query&gt;&lt;SupportedFormats&gt;&lt;Format&gt;urn:Microsoft.Search.Response.Document.Document&lt;/Format&gt;&lt;/SupportedFormats&gt;&lt;Context&gt;&lt;QueryText language='en-US' type='STRING'&gt;ACCORDION&lt;/QueryText&gt;&lt;/Context&gt;&lt;/Query&gt;&lt;/QueryPacket&gt;
                </queryXml>
          </Query>
     </s:Body>
</s:Envelope>

在查看 Web 服务描述时(通过将浏览器指向 _vti_bin/search.asmx?op=Query),我意识到现在出现的命名空间<s:Body应该在<s:Envelope. 然后我在 Fiddler 中编辑了请求并重新发送,现在服务器正确响应。这是编辑后的请求:

<s:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
      <s:Body >
          <Query xmlns="urn:Microsoft.Search"><queryXml>&lt;QueryPacket xmlns='urn:Microsoft.Search.Query'&gt;&lt;Query&gt;&lt;SupportedFormats&gt;&lt;Format&gt;urn:Microsoft.Search.Response.Document.Document&lt;/Format&gt;&lt;/SupportedFormats&gt;&lt;Context&gt;&lt;QueryText language='en-US' type='STRING'&gt;ACCORDION&lt;/QueryText&gt;&lt;/Context&gt;&lt;/Query&gt;&lt;/QueryPacket&gt;
        </queryXml>
         </Query>
       </s:Body>
 </s:Envelope>

这不是很奇怪吗?我错过了什么吗?有任何想法吗?

提前致谢

4

1 回答 1

0

用 CDATA 包围 QueryPacket 中的文本,您应该有正确的行为,而不必先对其进行编码。

<![CDATA[your query]]>
于 2014-11-19T12:10:19.813 回答