2016-06-24 131 views
0

我已经为WOPI客户端(即Office Online)实现了putFile端点 单击编辑文档按钮时,第一个请求应该发送到WOPI客户端?WOPI编辑文档

我已经称为继上编辑链接网址:

POST https://word-edit.officeapps-df.live.com/we/wordviewerframe.aspx?WOPISrc=https://domain/WOPI_IntegrationDemo/wopi/files/Sample_application_content3.docx/ 

但文件说,它会首先执行锁定请求。这究竟意味着什么?

回答

0

从你的问题我明白你正在实施一个WOPI主机。该URL看起来非常好 - 只要确保WOPISrc参数已被转义并且包含access_token参数。

当您单击URL时,您将指示WOPI客户端(OO/OWA)从WOPI主机加载由WOPISrc定义的字段。

WOPI客户端通常会首先尝试从WOPI主机获取锁(独占写访问)。为了这些目的,您应该根据documentation在WOPI主机中执行LOCK操作。

0

首先,您必须为此 添加Access令牌,然后尝试对其进行编辑调用 1.get file info。获取[路线(“文件/ {名称} /”)] 2.post文件。 Post [路由(“文件/ {名称} /”)] 听说你必须实现对锁定文件的响应Cobalt请求 var response = new HttpResponseMessage(HttpStatusCode.OK); (xWopiOverride ==“LOCK”|| string.Equals(xWopiOverride,“UNLOCK”)) {0}对于docx,xl​​sx和pptx response = new HttpResponseMessage(HttpStatusCode.OK); } 否则如果(string.Equals(xWopiOverride, “钴”)) { //钴,对于DOCX和PPTX

   EditSession editSession = EditSessionManager.Instance.GetSession(access_token); 
       if (editSession == null) 
       { 
        editSession = new FileSession(access_token, fileInfo, matterInfo, dpsUserName, databaseInfo, string.Empty, string.Empty, string.Empty, false); 
        EditSessionManager.Instance.AddSession(editSession); 
       } 

       var memoryStream = new MemoryStream(); 
       HttpContext.Current.Request.InputStream.CopyTo(memoryStream); 
       var atomFromByteArray = new AtomFromByteArray(memoryStream.ToArray()); 

       ProtocolVersion protocolVersion; 
       object context; 
       var requestBatch = new RequestBatch(); 
       requestBatch.DeserializeInputFromProtocol(atomFromByteArray, out context, out protocolVersion); 
       editSession.ExecuteRequestBatch(requestBatch); 

       foreach (var request in requestBatch.Requests) 
       { 
        if (request.GetType() == typeof(PutChangesRequest) && request.PartitionId == FilePartitionId.Content) 
        { 
         editSession.Save(); 
         break; 
        } 
       } 

       var responseContent = requestBatch.SerializeOutputToProtocol(protocolVersion, context); 
       var correlationId = Request.Headers.GetValues("X-WOPI-CorrelationID").First(); 

       response.Headers.Add("X-WOPI-CorrelationID", correlationId); 
       response.Headers.Add("request-id", correlationId); 

       var pushStreamContent = new PushStreamContent((outputStream, httpContext, transportContent) => 
       { 
        responseContent.CopyTo(outputStream); 
        outputStream.Close(); 
       }); 

       response.Content = pushStreamContent; 
       response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
       response.Content.Headers.ContentLength = responseContent.Length; 
      } 
      return response; 
+0

休耕此https://github.com/petrsvihlik/WopiHost –