Help and Support

文章编号: 555538 - 最后修改: 2005年12月19日 - 修订: 1.0

VSTO 服务器缓存文档

作者?Alvin Bruney MVP
展开全部 | 关闭全部

概要

本文介绍如何使用和用于应用程序缓存和文档管理服务器文档类没有 Web 服务器上运行 Microsoft Office 的实例。

抽象

听说也许 you?ve 过的 VisualStudioToolsforOffice 用于 Office 系统 2005 (VSTO)。 事实上, I?d Venture 推测, 某些人可能有与其 toyed 或甚至启动严重开发基于工具套件。 对于那些人 haven?t, VisualStudioToolsforOffice Office System 2005 允许开发人员利用 MicrosoftOffice 威力企业级应用程序中用户。
?
当前, VSTO 工具套件支持 MicrosoftExcel、 Word、 InfoPath 和 Outlook。 这些应用程序可能生成使用 C# 或 VisualBasic.NET (Visual Basic)。 大多数的目标窗口表单开发和粗客户开发, 时重要条侧重于服务器端开发。
?

测试到 VSTO MicrosoftOffice 自动化

不需要在服务器上启动 MicrosoftOffice 的实例可操纵 VSTO - 基于应用程序。 本文说明的 Office 实例通过开发的应用程序处理服务器上文档不需要用于文档自动化。 我们再创建其他应用程序, 可访问和修改数据。 最后, 我们编写三段 - 监视进程只监视服务器对于 MicrosoftOffice 的一个实例。 如果实例检测, 我们监视进程将通知我们。
?
下面是对于监视过程代码。
?
使用系统 ;
使用 System.Runtime.InteropServices;
?
空间 WatchDog
{
??? classProgram
??? {
??????? 主 staticvoid (字符串 [ 参数)
??????? {
??????????? 对象 automator = null;
??????????? 虽然 () automator = = null
??????????? {
??????????????? 尝试
??????????????? {
??????????????????? automator = Marshal.GetActiveObject("Word.Application");
??????????????????? Console.WriteLine("An instance of Office is running.");
??????????????????? Console.Read();
??????????????????? Marshal.ReleaseComObject(automator);
??????????????? }
??????????????? catch (System.Runtime.InteropServices.COMException)
??????????????? {
??????????????????? Word //Microsoft 未运行
??????????????????? Console.WriteLine("Watching...");
??????????????? }
??????????? }
??????? }
??? }
}
列表 1 - 0 监视进程代码
?
监视应用程序概念上简单。 A 驱动器进程循环时。 过程每次迭代, 代码搜索的 MicrosoftWord 实例。 如果没有实例存在, 应用程序打印相应消息并继续监视。 要测试监视器, 编译并引发应用程序。 运行应用程序, 时 MicrosoftWord 打开并且应通知实例正在运行。 它一定必须避免在服务器上创建的 MicrosoftWord 实例记住, 用于 MicrosoftOffice 自动化应用程序来调整好。
?
下面是代码来创建和存放基于 VSTO 数据。 创建新 VSTO 基于项目并输入以下代码。
?
使用系统 ;
使用 System.Data;
使用 System.Drawing;
使用 System.Windows.Forms;
使用 Microsoft.VisualStudio.tools.applications.Runtime;
使用 Word = Microsoft.Office.Interop.Word;
使用 Office = Microsoft.Office.core;
?
空间 WordDocument1
{
??? 公用局部类 ThisDocument
??? {
??????? 缓存 [ ]
??????? 公用 DataSet 数据 ;
??????? 专用 void ThisDocument_Startup (object sender, ByValeAsSystem.EventArgs e)
??????? {
??????????? 数据 = 新 DataSet();
??????????? data.ReadXml("sampledata.xml");
??????? }
?
??????? 专用 void ThisDocument_Shutdown (object sender, ByValeAsSystem.EventArgs e)
??????? {
??????? }
??? }
}
列表 1 - 1 应用程序数据
?
此应用程序设置必要管道允许 VSTO - 基于应用程序内存储数据。 首行的代码声明公用数据集具有缓存属性。 缓存属性通知 VSTO 以便它是外部应用访问数据集中包含数据应该存储以特殊方式中。
?
将某些任意数据, sampledata.xml, 接着, 代码加载到数据集。 在现实世界, 此应用程序将通常从数据存储读取并对数据应用某种类型的业务逻辑。 这使我们跳业务逻辑段实际 isn?t。
?
我们最后一部分代码只尝试访问数据。 下面是代码。
?
公用 void ManipulateData()
{
??????????? DataSet newDataSet;
??????????? //point 到调试器目录中 doc 文件
??????????? 字符串 fileName = ?C:\WordDocument1\bin\debug\WordDocument1.doc?;
??????????? 如果 (ServerDocument.IsCacheEnabled(fileName))
??????????? {
??????????????? ServerDocument servDoc = null;
??????????????? 尝试
??????????????? {
??????????????????? servDoc = newServerDocument(fileName);
??????????????????? newDataSet = 新 System.Data.DataSet();
?
??????????????????? //grab 命名空间和类包含缓存数据
??????????????????? CachedDataHostItem hostI = servDoc.CachedData.HostItems["WordDocument1.ThisDocument ] ";
?
??????????????????? CachedDataItem dataI ]; = hostI.CachedData[0
??????????????????? / / 加载数据
??????????????????? 如果 () & 空 = dataI.xml 空 = dataI.Schema ! !
??????????????????? {
??????????????????????? System.IO.StringReader xmlReader = 新 System.IO.StringReader(dataI.xml);
????? ??????????????????System.IO.StringReader schemaReader = 新 System.IO.StringReader(dataI.Schema);
????????????????????
??????????????????????? newDataSet.ReadXmlSchema(schemaReader);
??????????????????????? newDataSet.ReadXml(xmlReader);
???????????????? ???????
If(newDataSet != null && newDataSet.tables != null && newDataSet.tables.Count > 0)
{
??????????? / / 通过添加某些任意信息修改数据
????????????foreach (DataRow 中行 newDataSet.tables[0].rows)
????????????{
???????????????? 行 [ 0 ] = ?my 转 here? ; 新值
????????????}
? }
?
??????????????????????? dataI.SerializeDataInstance(newDataSet);
??????????????????????? servDoc.Save();
??????????????????? }
??????????????? }
??????????????? 最后
??????????????? {
??????????????????? 如果 () servDoc = null !
??????????????????????? servDoc.Close();
??????????????? }
??????????? }
}
列表 1 - 2 应用程序来处理数据
?
难遵循该代码 isn?t。 首先, 代码测试, 看 VSTO 基于应用包含数据缓存。 数据缓存是新容器, 就能够访问和操作数据 VSTO - 基于应用程序内。 如果文档支持 VSTO 数据缓存, ServerDocument 的实例创建类。 这是一个特殊类别, 就能够操作实际数据应用程序内。
?
请注意代码如何使用特殊命名语法 ?WordDocument1.ThisDocument? 来访问数据 这是因为不再 worddocument1.doc 文件中存储 VSTO - 基于 Microsoft 单词文档中显示数据。 它现在存储在特殊容器访问到此处提到语法使用 serverdocument 类。
一旦获得对数据访问, 代码可只读入数据集数据并处理它。 最后, serverdocument class? 保存方法用于写回应用程序存储在数据集中更改数据。
?
向上因此 let?s 引发它。 运行应用监视器首先要开始监视对于 MicrosoftOffice 的一个实例。 1 - 1 列表中然后运行代码以便可加载数据。 最后, 激发向上代码以便可操作数据列表 1 - 2 中。
?
运行测试装置后您会发现没有从监视进程通知过程执行成功。 测试装置演示 MicrosoftOffice, 不需要操作 VSTO - 基于服务器上应用程序中包含数据。
?
新 VSTO 设计是此改进实际上理由。 现在 VSTO 从演示文稿分隔内容。 此 divorced 结构允许调用代码以 VSTO - 基于应用程序不需要启动实例对 MicrosoftOffice 或 MicrosoftExcel 内包含服务数据。 因为 Office 的实例是避免过程自动化, 然后附带 Office 自动化伸缩性问题消失完全。
?
呈现代码演示 divorced 结构实际工作并且是可伸缩 ? 虽然 haven?t 测试伸缩性索赔我们。 但是, 有几个缺点到此银色项目符号。 必须为 Office 系统 2005 使用 VisualStudioToolsforOffice 因为它需要支持数据缓存创建数据。 原因是相当 shortcoming 一定意味着如果打算利用缓存数据, 您必须迁移应用程序到解决方案 VSTO 首先。 还, Datacaching 仅支持 MicrosoftWord 和 MicrosoftExcel 中。 没有 datacaching Infopath Microsoft 或 Microsoft Outlook 中不支持。
?
另一个缺点是 VSTO 工具套件是不可用。 与基于 COM 是基本上免费, 常规 Office 开发相比零现金成本可上去多余投资。 仍然, 如果有要求对高度可伸缩的一种 Office 自动化软件, VSTO 似乎像好替代。

这篇文章中的信息适用于:
  • Microsoft Visual C# .NET 2003 Standard Edition
机器翻译机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。如果您发现了错误并希望帮助我们提高机器翻译技术,请完成文章末尾的在线调查。
点击这里察看该文章的英文版: 555538? (http://support.microsoft.com/kb/555538/en-us/ )
Community Solutions Content社区解决方案内容免责声明
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的或衍生性的损失或任何种类的损失,均不负任何责任,无论该等诉讼是合同之诉、疏忽或其它侵权行为之诉。

文章翻译

 

Related Support Centers