`
touchmm
  • 浏览: 1043228 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Web Storage System + WebDAV

阅读更多

标题:Web Storage System + WebDAV

关键字:WebDAV

链接:http://blog.csdn.net/jrq/archive/2007/02/08/1504984.aspx


1.Web存储系统(Web Storage System):

Exchange Web 存储是一种数据库技术,可用于存储、共享和管理异类数据,如电子邮件、Web 页、多媒体文件和 Microsoft Office XP 文档。

Web 存储系统很象传统的文件系统,用文件夹层次进行组织。

Web 存储系统中的每个文件夹可包含任意数目的项,包括其它文件夹。

可以使用许多协议和应用程序编程接口 (API)(包括超文本传输协议 (HTTP) 和 WebDAV (HTTP/WebDAV)、Microsoft ActiveX 数据对象版本 2.5 (ADO)、OLE DB 版本 2.5、Exchange 2000 协作数据对象 (CDOEX)、消息处理 API (MAPI))通过文件系统并使用多种其他工业标准的有线协议来访问 Web 存储系统中的项。

Web 存储系统提供一个储备库,在一个基础结构中管理电子邮件、文档、Web 页和其他资源,从而将知识源集成在一起。

Web 存储系统支持远程客户端访问,并支持一些 API。此外,Web 存储系统还充当统一消息传递平台,知识工作者可以在此访问私人信息,如日历、联系人以电子邮件和语音邮件。

Web 存储系统在以下三个主要方面提供基于企业的应用程序服务:

常见的客户端访问 — 客户端(如 Office)可以读写文档,并可存储流数据(如音频和视频)。Web 存储系统包括支持层次集合(文件夹)以及异类集合(可接受任何文件类型的文件夹)的数据模型。

下一代数据库 — Web 存储系统提供了下一代的数据库服务,它可以将多种类型的信息存储在一个储备库中。包含在 Web 存储系统数据库中的信息,可以是不同类型的数据,如从 OLE DB 和 ActiveX 数据对象 (ADO) 记录集到 MIME 邮件和可扩展标记语言 (XML) 数据等。Web 存储系统还提供诸如原子更新等数据库服务。如果更新涉及到 Web 存储系统中的多个项,则这些服务为最终用户显示一致的视图。

丰富的开发平台 — Web 存储系统支持消息传递、联系人、日历、工作流以及组和实时协作。


2.WebDAV

分布式创作和版本管理,用于访问 Microsoft Web 存储系统中项目的协议。它提供了一种方法,既能访问项目内容,又能访问扩展的相关属性集。也称为 HTTP/WebDAV 协议。


3.使用 Web 存储系统资源管理器:

3.1.单击“开始”按钮,指向“程序”、“Web Storage System SDK”,然后指向“Web Storage System Tools”。

3.2.单击“Web Storage System Explorer”,打开 WSS 资源管理器。

3.3.在“Authorization”对话框中,输入您的用户名、密码,使用具有适当权限的帐户证书,并以 http://<yourserver>/public 的形式指定 URL。

3.4.WSS 资源管理器将启动。

4.D7中WebDAV的操作代码示例:


var WebPath,WebDomain,WebUser,PassWord:String;

uses ComObj;

procedure WriteLog(const LogStr:String);
var F:TextFile;
begin
if LogStr<>'' then //写日志文件
begin
AssignFile(F,ExtractFilePath(ParamStr(0))+'Log\Message'+FormatDateTime('yyyy-mm-dd',now)+'.log');

if not FileExists(ExtractFilePath(ParamStr(0))+'Log\Message'+FormatDateTime('yyyy-mm-dd',now)+'.log') then
begin
ReWrite(F); //为写创建一个新文件;
Writeln(F,'['+FormatDateTime('yyyy-mm-dd hh:mm:ss',now)+']: '+ LogStr);
CloseFile(F);
end
else
begin
Append(F);
if LogStr=' ' then
Writeln(F,'')
else
Writeln(F,'['+FormatDateTime('yyyy-mm-dd hh:mm:ss',now)+']: '+ LogStr);
CloseFile(F);
end;
end;
end;

procedure AddChild(XMLDOM, TagName, NameSpace, NodeValue,
ndlevel: variant);
var objChildNode,objParentNode:Variant;
i:Integer;
begin
objChildNode:=xmldom.createNode(1,TagName,NameSpace);
objChildNode.text:=nodevalue;

if ((XMLDOM.HasChildNodes) and (ndlevel>1)) then
begin
objParentNode := xmlDom.LastChild;

for i:=0 to ndlevel-3 do
if (objParentNode.hasChildNodes) then
objParentNode := objParentNode.LastChild;

objParentNode.AppendChild(objChildNode);
end
else
begin
XMLDOM.AppendChild(objChildNode);
end;

objParentNode := null;
objChildNode :=null;
end;


procedure SaveFieldUsingWebDAV(MessageUrl, FieldName, NameSpace,
FieldValue: variant);
var aXMLDOC,aXMLHTTP:Variant;
begin
aXMLHTTP:=CreateOleObject('MSXML2.XMLHTTP.3.0');
aXMLDOC:= CreateOleObject('MSXML2.DOMDocument.3.0');

AddChild(aXMLDOC,'d:propertyupdate','DAV:','',1);
AddChild(aXMLDOC,'d:set','DAV:','',2);
AddChild(aXMLDOC,'d:prop','DAV:','',3);
AddChild(aXMLDOC,FieldName,NameSpace,FieldValue,4);

aXMLHTTP.open('PROPPATCH',MessageUrl, False,WebDomain+'\'+WebUser,PassWord);
aXMLHTTP.setRequestHeader('Content-Type','text/xml; charset=''UTF-8''');
aXMLHTTP.setRequestHeader('Overwrite','t');
aXMLHTTP.setRequestHeader('Translate','f');
//aXMLDOC.save(ExtractFilePath(ParamStr(0))+'c.xml');
aXMLHTTP.send(aXMLDOC);

aXMLHTTP:=null;
aXMLDOC:=null;
end;


procedure SetMessageProperty(MessageUrl, NameSpace, TagName,
Value, Domain, UserName, PassWord: variant);
var XMLHttp,strWebDav:variant;
aStr:string;
begin
XMLHttp:=CreateOleObject('MSXML2.XMLHTTP.3.0');
strWebDav:='';
if ((namespace='DAV') or (namespace='DAV:')) then
begin
strWebDav := strWebDav+'<d:propertyupdate xmlns:d=''DAV:''>';
strWebDav := strWebDav+'<d:set>';
strWebDav := strWebDav+'<d:prop>';
strWebDav := strWebDav+'<d:' + TagName + '>' + Value + '</d:' + TagName + '>';
strWebDav := strWebDav+'</d:prop>';
strWebDav := strWebDav+'</d:set>';
strWebDav := strWebDav+'</d:propertyupdate>';
end
else
begin
strWebDav := strWebDav+'<d:propertyupdate xmlns:d=''DAV:'' xmlns:m="' + NameSpace + '">';
strWebDav := strWebDav+'<d:set>';
strWebDav := strWebDav+'<d:prop>';
strWebDav := strWebDav+'<m:' + TagName + '>' + Value + '</m:' + TagName + '>';
strWebDav := strWebDav+'</d:prop>';
strWebDav := strWebDav+'</d:set>';
strWebDav := strWebDav+'</d:propertyupdate>';
end;

aStr:=MessageUrl;

XMLHttp.open('PROPPATCH',astr,false,WebDomain+'\'+WebUser,PassWord);
XMLHttp.setRequestHeader('Content-Type','text/xml; charset=''UTF-8''');
XMLHttp.setRequestHeader('Translate','f');
//WriteLog(strWebDav);
XMLHttp.send(strWebDav);
end;


procedure TForm1.Button1Click(Sender: TObject);
var Count,i,j:integer;
XMLHttp,XMLDOC,XMLNode,WebDav:Variant;
WebSQL:WideString;
CurrentFlow,GDName,GDBZ,tmpStr:String;
FlowList:TStringList;
begin
XMLHttp:=CreateOleObject('MSXML2.XMLHTTP.3.0');
XMLDOC:= CreateOleObject('MSXML2.DOMDocument.3.0');

WebPath:='http://ex01/public/工作流程/'; //ExChange服务地址
WebDomain:='Hebmc.com'; //域
WebUser:='OAWebUser'; //域账户
PassWord:='chenzuooaup02'; //域账户密码
GDName:='HASTOTHAMS20070112'; //标记
GDBZ:='TRUE'; //标记值

//使用WebDav的查询语句。
WebSQL:='select "DAV:displayname" From "'+WebPath+'" where (("DAV:contentclass"=''urn:content-classes:folder'') or ("DAV:contentclass"=''urn:content-classes:mailfolder''))';
WebDav:='<D:searchrequest xmlns:D="DAV:"> <D:sql> '+WebSQL+' </D:sql> </D:searchrequest>';
{
WebDav:='<D:searchrequest xmlns:D="DAV:"> <D:sql> select "DAV:displayname" From "http://ex01/public/工作流程/" where (("DAV:contentclass"=''urn:content-classes:folder'') or ("DAV:contentclass"=''urn:content-classes:mailfolder'')) </D:sql> </D:searchrequest>';
}

//查找系统中所有的流程名称
try
XMLHttp.open('SEARCH',WebPath,False,WebDomain+'\'+WebUser,PassWord);
XMLHttp.setRequestHeader('Content-Type','text/xml; charset=''UTF-8''');
XMLHttp.setRequestHeader('depth','0');
XMLHttp.setRequestHeader('Translate','f');
XMLHttp.send(WebDav); //WebDAV查询
XMLDOC.Load(XMLHttp.responseXML); //得到返回值
//XMLDOC.save(ExtractFilePath(ParamStr(0))+'a.xml');

//得到系统中所有的流程名称
XMLNode:=XMLDOC.DocumentElement.SelectNodes('a:response/a:propstat/a:prop');
except on e:Exception do
WriteLog(e.Message);
end;

FlowList:=TStringList.Create;

//添加流程名称到List中
for Count:=0 to XMLNode.Length-1 do
FlowList.Add(XMLNode.Item[Count].ChildNodes(0).Text);


//流程循环
for Count:=0 to FlowList.Count-1 do
begin
CurrentFlow:=Trim(FlowList[Count]);

WebSQL:=' select "DAV:href","拷贝ID","DAV:displayname","发件编号$$","密级$$","主办部门$$","主题词$$","收文机关$$","发文公司$$","来文机关$$" '+
' from "'+WebPath+CurrentFlow+'/已办理信文'+'" '+
' where ((("DAV:contentclass"=''urn:content-classes:message'')) and (("'+GDName+'" is null) or ("'+GDName+'"!='''+GDBZ+''')) and (("KDBZ" is null) or ("KDBZ"=''N'')))';

WebDav:='<D:searchrequest xmlns:D="DAV:"> <D:sql> '+WebSQL+' </D:sql> </D:searchrequest>';

try
XMLHttp.Open('SEARCH',WebPath,False,WebDomain+'\'+WebUser,PassWord); //WebDav查找
except on e:Exception do
WriteLog(e.Message);
end;

try
XMLHttp.setRequestHeader('Content-Type','text/xml; charset=''UTF-8''');
XMLHttp.setRequestHeader('depth','0');
XMLHttp.setRequestHeader('Translate','f');
XMLHttp.Send(WebDav);
XMLDOC.Load(XMLHttp.responseXML);
//XMLDOC.save(ExtractFilePath(ParamStr(0))+'b.xml');

//得到某流程中的所有的条目节点。
XMLNode:=XMLDOC.documentElement.selectNodes('a:response/a:propstat/a:prop');
except on e:Exception do
WriteLog(e.Message);
end;

//该条目节点内的属性(子节点)循环
for i:=0 to XMLNode.Length-1 do
begin
for j:=0 to XMLNode.Item[i].ChildNodes.Length-1 do
begin
tmpStr:=XMLNode.Item[i].ChildNodes(j).Text; //得到属性的内容
//此处可以对tmpStr做其他操作,如保存到数据库。
end; //for j:=0

//该条目节点处理完毕后,写入已经处理的标记。
try
SetMessageProperty(XMLNode.Item[i].ChildNodes(0).Text,'',GDName,GDBZ,WebDomain,WebUser,PassWord);
except on e:Exception do
begin
WriteLog(e.Message);
Continue;
end;
end;

try
SaveFieldUsingWebDAV(XMLNode.Item[i].ChildNodes(0).Text,GDName,'',GDBZ);
except on e:Exception do
begin
WriteLog(e.Message);
Continue;
end;
end;
end; //for i:=0 to XMLNode.Length-1 do
end; //for Count:=0 to FlowList.Count-1 do

FreeAndNil(FlowList);
XMLNode:=null;
XMLDOC:=null;
XMLHttp:=null;

end;

end.


5.参考:

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/modcore/html/deconworkingwithexchangewebstore.asp

http://www.microsoft.com/china/MSDN/library/archives/library/techart/wssformsreg_v4.asp

http://www.microsoft.com/china/MSDN/library/archives/MSDNonline/features/articles/newdevfeaturese2k.asp


by jrq

2007/02/07 雪 于石·移动

分享到:
评论

相关推荐

    WebDAV Next-Generation Collaborative Web Authoring

    WebDAV: Next-Generation Collaborative Web Authoring is the complete guide to Web-based Distributed Authoring and Versioning (WebDAV), the IETF standard for Web authoring and wide area collaboration....

    android webdav工具类

    在Android开发中,WebDAV(Web-based Distributed Authoring and Versioning)是一种协议,它扩展了HTTP协议,允许用户以类似文件系统的方式存取远程服务器上的文件。WebDAV工具类在Android应用中通常用于实现文件...

    docker-nginx-webdav:docker nginx webdav高山cloudflare

    docker-cwebdav 该映像运行带有nginx的易于配置的WebDAV服务器,支持纯证书,自签名证书或Let's Encrypt证书。 代码仓库: : 码头工人: : 用法基本的WebDAV服务器本示例在端口80上启动WebDAV服务器。只能使用单个...

    IIS webdav扫描器

    【IIS WebDAV扫描器】是一种专门针对微软Internet Information Services (IIS) Web服务器上WebDAV服务的安全检测工具。WebDAV(Web-based Distributed Authoring and Versioning)是HTTP协议的一个扩展,允许用户...

    webdav-aliyundriver 实现了阿里云盘的 webdav 协议,只需要简单的配置一下,就可以让阿里云盘变身为web

    webdav-aliyundriver 实现了阿里云盘的 webdav 协议,只需要简单的配置一下,就可以让阿里云盘变身为webdav协议的文件服务器, 基于此,你可以把阿里云盘挂载为Windows、Linux、Mac系统的磁盘,可以通过NAS系统做...

    webdav实现office在线编辑

    WebDAV(Web Distributed Authoring and Versioning)是一种基于HTTP协议的协议,允许用户通过网络进行文件编辑和管理。在本场景中,我们将探讨如何利用IIS(Internet Information Services)服务器上的WebDAV功能...

    支持Webdav的客户端AnyClient

    WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的协议,它扩展了HTTP,使得用户可以通过Web浏览器进行文件的创建、修改和管理。AnyClient是一款支持WebDAV协议的客户端软件,同时也...

    webdav安卓包.zip

    下面我们将详细探讨WebDAV、如何在Android上实现它,以及与群晖NAS(Network Attached Storage)的集成。 首先,WebDAV扩展了HTTP协议,提供了创建、删除、移动、复制和检索文件的能力,使得用户可以像操作本地文件...

    webdav客户端中文版

    WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的协议扩展,它允许用户通过Web服务器编辑和管理存储在远程服务器上的文件。WebDAV客户端是用于与WebDAV服务器交互的软件,使得用户...

    allwaysync

    《全面解析AllwaySync:强大的备份与同步利器》 在当今的数字时代,数据安全与管理成为了个人和企业的重要议题。AllwaySync,正如其名,是一款强大的备份和同步软件,以其高效、可靠的特点赢得了用户的广泛赞誉。...

    FileBackup-WebDav 1.8.5 绿色版_结合你的WebDav进行备份.rar

    WebDav(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的扩展,允许用户通过Web服务器对远程文件进行读写操作,如同本地文件系统一样。FileBackup-WebDav的出现,使得用户无需复杂的配置,...

    精品软件工具--webdav+ssl安装工具软件,运行本软件可以帮你快速搭建一个支持ssl的webdav站点.zip

    本软件“精品软件工具--webdav+ssl安装工具软件”是一个集成解决方案,旨在帮助用户便捷地设置和配置一个支持SSL的WebDAV服务器。以下将详细介绍WebDAV和SSL的相关知识以及该安装工具软件可能涉及的功能: 1. **...

    django-webdav-storage:Django存储后端,可让您轻松地将用户生成的静态文件保存到自己的WebDAV存储中,而不是像Django默认情况下那样将其保存到本地文件系统中

    **django-webdav-storage** 是一个专门为Django框架设计的存储后端,它允许开发者将用户生成的静态文件和媒体文件存储在WebDAV服务器上,而非传统的本地文件系统。WebDAV是一种基于HTTP协议的协议,用于用户编辑和...

    WebDav_Client.zip

    Microsoft windows2000、XP、Win7及IE, Office还有Adobe/MacroMedia的DW等都支持Webdav,这又大大增强了Web应用的价值,以及效能。对于需要大量发布内容的用户而言,应用WebDav可以降低对CMS系统的依赖,而且能够更...

    ghost-webdav-storage-adapter:用于Ghost发布平台的WebDAV存储适配器

    cp -v ./node_modules/ghost-webdav-storage-adapter/dist/ * .js ./content/adapters/storage/webdav 配置 通过将以下行添加到文件来配置WebDAV存储适配器。 { " storage " : { " active " : " webdav " , " ...

    webdav.net

    WebDAV(Web Distributed Authoring and Versioning)是一种基于HTTP协议的协议,它扩展了HTTP,使得用户可以进行创建、修改以及管理远程服务器上的文件。WebDAV的主要目的是提高网络协作和远程文件编辑的效率。在...

    Laravel开发-laravel-webdav

    WebDAV协议的使用使得用户可以通过Web浏览器或者其他支持WebDAV的客户端来操作远程文件,就像操作本地文件系统一样。 ### Laravel集成WebDAV 在Laravel中实现WebDAV,我们需要一个WebDAV服务器组件。这个"laravel-...

    webdav-aliyundriver-2.4.0.zip

    WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的协议扩展,它允许用户通过Web服务器编辑和管理存储在远程服务器上的文件。阿里云盘是一个云存储服务,提供安全、便捷的数据存储和...

    Laravel开发-laravel-webdav-method

    在Laravel框架中,WebDAV(Web-based Distributed Authoring and Versioning)是一种扩展HTTP协议的方法,用于允许用户通过Web接口进行文件编辑和管理。在标题提到的"Laravel开发-laravel-webdav-method"中,我们...

Global site tag (gtag.js) - Google Analytics