我试图从.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><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>
这不奇怪吗?我错过了什么吗?有什么想法吗?
提前致谢
答案 0 :(得分:0)
使用CDATA在QueryPacket中包围文本,你应该有正确的行为,而不必先编码。
<![CDATA[your query]]>