我尝试在 C# 中实现一个自定义 Wopi 主机,它可以使用 CobaltCore 程序集处理 Cobalt 协议。
但是我没有发现 CobaltCore.dll 对象浏览器的任何文档有点帮助..
如果有人遇到类似问题,请提供一些详细信息。我应该如何使用 Cobalt 来破译消息?
我尝试在 C# 中实现一个自定义 Wopi 主机,它可以使用 CobaltCore 程序集处理 Cobalt 协议。
但是我没有发现 CobaltCore.dll 对象浏览器的任何文档有点帮助..
如果有人遇到类似问题,请提供一些详细信息。我应该如何使用 Cobalt 来破译消息?
对于文字编辑实现,请访问此处:
// fsshttpb payload, basically decode from base64 encoded
byte[] test1 = System.Convert.FromBase64String("DAALAJzPKfM5lAabBgIAAO4CAABaBBYADW1zd29yZAd3YWN6AggA1RyhD3cBFgIGAAMFABoEIAAL3Do4buY4RJXm4575cgEiigICAAALAawCAFUDAQ==");
// create an atom object from the fsshttp input
AtomFromByteArray atomRequest = new AtomFromByteArray(test1);
RequestBatch requestBatch = new RequestBatch();
requestBatch.DeserializeInputFromProtocol(atomRequest);
// now you can inspect requestBatch to view the decoded objects
编辑:
这是使用 CobaltCore 的示例实现。我在这个网站上对 WOPI/FSSHTTP 的回答几乎是一个项目的组合。
还实现了 Cobalt 编辑方法,就像 Julia 一样,即使在锁定存储回调(包括共同作者等)之后,它也会停止在“无法编辑屏幕”。然而,我发现 OWA 的日志系统揭示了关于 OWA 服务器的相当多的细节是什么试图做。C:\ProgramData\Microsoft\OfficeWebApps\Data\Logs\ULS 我可以从这些日志中看到它抱怨缺少访问令牌,方法是提供
&access_token=1&access_token_ttl=0
到 wopi url 的末尾,这个错误就消失了。
我还测试了许多文件信息字段,并且能够看到 OWA 服务器如何缓存信息。如果我们不断改变 cfi.Version
FileInfo info = new FileInfo("C:\\WOPI OWA WORD EDITOR\\OWA_Source_Documents\\" + fi.Name);
cfi.Version = info.LastWriteTimeUtc.ToString("s");
每次通过普通单词更改文件内容时,我们都会得到一个新的缓存项。
这些也会影响 Word 的查看模式,我怀疑会将我们锁定在 word 编辑模式之外,但由于我没有那个工作,我还不能说。
cfi.SupportsCoauth = true; // all three (3) needed to see the edit in browser menu in view mode .
cfi.SupportsCobalt = true; // all three (3) needed to see the edit in browser menu in view mode .
cfi.SupportsFolders = true; // all three (3) needed to see the edit in browser menu in view mode .
cfi.SupportsLocks = true;
cfi.SupportsScenarioLinks = false;
cfi.SupportsSecureStore = true;
cfi.SupportsUpdate = true;
这会锁定单词编辑功能,除非您更新文件的版本,否则即使您将其更改回 false,它也会保持锁定状态。
cfi.WebEditingDisabled = false;
罗杰·霍格
感谢 thebitllc 提供了正确的方法来取回文件。
System.IO.FileStream _FileStream = new System.IO.FileStream("C:\\WOPI OWA WORD EDITOR\\OWA_Updated_Documents\\output.docx", System.IO.FileMode.Create, System.IO.FileAccess.Write);
GenericFdaStream myCobaltStream = new GenericFda(cobaltFile.CobaltEndpoint, null).GetContentStream();
myCobaltStream.CopyTo(_FileStream);
_FileStream.Close();