3

I'm trying to implement MS-FSSHTTP for Office Web Apps. Specifically, I just need to get Word working.

The OWA server is sending out a ExecuteCellStorageRequest request, which follows the FSSHTTP standard (looks like butchered SOAP).

The request body is a standard SOAP request sans Envelope. It looks like this (formatted for clarity):

<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>

I wrap this request in a standard SOAP Envelope,

$wrap_req = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body>'.$req.'</SOAP-ENV:Body></SOAP-ENV:Envelope>';

So that I can pass it off the the built-in PHP SoapServer class (lest it crash with no error messsage).

When handled it calls a RequestVersion method for me (I assume this is correct; I can't make heads or tails of that binary message) and produces a response. [It's just taking the tag name and calling a function by the same name. I don't think this is what it's requesting at all.]

The response is supposed to be envelopeless as well, so I strip that off,

$doc = new DOMDocument();
$doc->loadXML($resp);
$resp_body = $doc->saveXML($doc->firstChild->firstChild->firstChild->firstChild);

And send it back. That looks like this:

<ResponseVersion xmlns="http://schemas.microsoft.com/sharepoint/soap/" Version="2" MinorVersion="0"/>

(I think this is the response it's looking for, by looking at this schema).

The request headers also say that it Expects a 100-continue, so I send back an HTTP 100 status code along with my response.

I can only assume the OWA server doesn't like my response because it immediately closes my connection,

2014/01/23 14:08:31 [info] 81976#0: *229 kevent() reported that client 192.168.0.10 closed keepalive connection

And now I'm stumped.

The OWA server isn't giving me any kind of error message, so I have no idea what could be wrong or how to get more information. I have remote access to the OWA machine, but I couldn't see anything useful in the logs.

Does anyone have any experience implementing MS-FSSHTTP (my Google searches suggest a resounding "no") or have any idea how to debug this further? I believe OWA is just an ASP.NET app running on IIS, but AFAICT all the sources are precompiled binary.

mpen
  • 272,448
  • 266
  • 850
  • 1,236
  • Did you make any progress after the question was posted? I have a very similar task and would like to know if anyone succeeded. – Marek May 02 '14 at 09:44
  • @Marek: Yes, I got over this particular hump. Don't bother using a SOAP library, the requests are malformed. It also contains no root element, but you can wrap it with one yourself. I don't understand everything it's requesting, but I managed to cobble together a response it accepts by picking through [the schema](http://msdn.microsoft.com/en-us/library/dd946484(v=office.12).aspx) by hand to deduce what it wants. The real fun begins when it suddenly switches over to binary MS-FSSHTTPB. – mpen May 02 '14 at 15:37
  • Thank you for your answer. Did you also solve the FSSHTTPB issues and implemented a functional solution to support in-browser editing for Word, or are there any other showstoppers awaiting along the way? – Marek May 05 '14 at 08:28
  • thanks very much for the info, very helpful, I am looking for the same answer here – windfly2006 Jul 30 '14 at 20:33
  • @Marek No, I still don't have a functional solution. There are *many* show stoppers along the way. – mpen Jul 30 '14 at 23:28
  • @windfly2006 You're welcome, but you have a long road ahead of you if you want to embed a Word editor. You need to implement Cobalt, MS-FSSHTTP, MS-FSSHTTPB and MS-FSSHTTPD, none of which are easy. Two of us having been working on this for months. – mpen Jul 30 '14 at 23:30
  • thanks @mark. by the way, there is already some working open source WOPI editor, here is one of those: https://github.com/thebitllc/WopiBasicEditor – windfly2006 Jul 31 '14 at 14:24
  • @windfly2006 Thanks but that requires `Microsoft.CobaltCore.dll` which I can't use on Linux. – mpen Jul 31 '14 at 15:47

0 Answers0