我正在尝试从 .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><QueryPacket xmlns='urn:Microsoft.Search.Query'><Query><SupportedFormats><Format>urn:Microsoft.Search.Response.Document.Document</Format></SupportedFormats><Context><QueryText language='en-US' type='STRING'>ACCORDION</QueryText></Context></Query></QueryPacket>
</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><QueryPacket xmlns='urn:Microsoft.Search.Query'><Query><SupportedFormats><Format>urn:Microsoft.Search.Response.Document.Document</Format></SupportedFormats><Context><QueryText language='en-US' type='STRING'>ACCORDION</QueryText></Context></Query></QueryPacket>
</queryXml>
</Query>
</s:Body>
</s:Envelope>
这不是很奇怪吗?我错过了什么吗?有任何想法吗?
提前致谢