我正在尝试为MS-FSSHTTP实施Office Web Apps。具体来说,我只需要让Word工作。
OWA服务器正在发送ExecuteCellStorageRequest请求,该请求遵循FSSHTTP标准(看起来像屠宰的SOAP)。
request body是一个标准的SOAP请求sans Envelope。它看起来像这样(为清晰起见而格式化):
<RequestVersion Version="2" MinorVersion="2" xmlns="http://schemas.microsoft.com/sharepoint/soap/"/>
<RequestCollection CorrelationId="4528ff55-db57-402f-894a-fcd23cb569c3" xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<Request RequestToken="0" Build="15.0.4481.1000" UserAgentClient="msword" UserAgentPlatform="wac" MetaData="99">
<SubRequest SubRequestToken="1" Type="Cell">
<SubRequestData BinaryDataSize="197" PartitionID="bbd4e3c0-21b4-463d-9279-9c5a9406aa8f">
DAALAJzPKfM5lAabBgIAAO4CAABaBBYADW1zd29yZAd3YWN6AggAFRihD3cBFgIGAAUFABoEIADA49S7tCE9RpJ5nFqUBqqPigICAAk+AgQAAQAfAT4CBAACALoCAgAVHwE+AgQABwECA1QAA1G5+t6Eo6oNSqOoUgx3rHBzAQAAAADqbeOQaI5Gpm3DzbeeY5MBAAAAHwE+AgQABwECAywAAikwtZ5NpE1DT7hZsxzAcAZlAQAAAB8BhABBCwGsAgBVAwE=
</SubRequestData>
</SubRequest>
</Request>
</RequestCollection>
我将此请求包装在标准SOAP信封中
$wrap_req = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body>'.$req.'</SOAP-ENV:Body></SOAP-ENV:Envelope>';
这样我就可以将它从内置的PHP SoapServer类中删除(以免崩溃而没有错误消息)。
当handled为我调用RequestVersion
方法时(我认为这是正确的;我无法对该二进制消息做出正面或反面)并生成一个响应。 [它只是采用标记名称并使用相同的名称调用函数。我认为这根本不是它的要求。]
响应也是supposed to be无信封,所以我将其剥离,
$doc = new DOMDocument();
$doc->loadXML($resp);
$resp_body = $doc->saveXML($doc->firstChild->firstChild->firstChild->firstChild);
然后寄回去。看起来像这样:
<ResponseVersion xmlns="http://schemas.microsoft.com/sharepoint/soap/" Version="2" MinorVersion="0"/>
(我认为这是它正在寻找的回应,通过查看this schema)。
请求标头还说它Expect
是100-continue
,因此我发送回HTTP 100状态代码以及我的回复。
我只能假设OWA服务器不喜欢我的响应,因为它会立即关闭我的连接,
2014/01/23 14:08:31 [info] 81976#0:* 229 kevent()报告客户端192.168.0.10关闭了keepalive连接
现在我很难过。
OWA服务器没有给我任何类型的错误消息,所以我不知道可能出现什么问题或者如何获取更多信息。我可以远程访问OWA机器,但我在日志中看不到任何有用的东西。
有没有人有任何实施MS-FSSHTTP的经验(我的谷歌搜索建议一个响亮的“不”)或者有任何想法如何进一步调试?我相信OWA只是在IIS上运行的ASP.NET应用程序,但AFAICT所有源代码都是预编译的二进制文件。