调用Sharepoint 2010 search.asmx时出现500内部服务器错误

时间:2012-10-23 14:19:36

标签: c# web-services sharepoint-2010

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

服务器无法处理请求。 --->来自HRESULT的异常:0x80131904 ---&gt ;;来自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>

这不奇怪吗?我错过了什么吗?有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

使用CDATA在QueryPacket中包围文本,你应该有正确的行为,而不必先编码。

<![CDATA[your query]]>