加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

AutoCAD WS APIs – C# Client[教程]

(2011-06-23 10:51:39)
标签:

autocad

ws

api

c

client

it

分类: 教程

Webdav客户端

 

本教程旨在为您示范如何用WebdavClient C#语言类对AutoCAD WS账户中的文件和文件夹执行各种操作。

使用这个C#语言类,您可以——

  •      连接到一个AutoCAD WS账户上
  •      查询账户文件/文件夹结构
  •      执行不同的文件操作,例如复制、粘贴、重命名、创建文件夹
  •      上传和下载文件
  •      查询文件元数据,例如最后修改、权限、缩略图
  •      WS在线编辑器中启动图纸文件

 

WebdavClient类使用WebDAV协议来和AutoCAD WS服务进行通信。WebdavClient C#语言类依靠标准的WebDAV协议来和AutoCAD WS服务进行通信。C++C#JavaJavaScript等多种编程语言都支持这个基于http的行业协议。点击这里观看使用JavaScript访问AutoCAD WS的教程

点击这里下载C语言样例应用程序源代码

 

 

构造器

WeddavClient类构造器需要三个参数:

 

1.     主机:Webdav服务器地址。例如,如果您要连接到AutoCAD WS服务器,就用 “https://dav.autocadws.com”。

2.     用户名:您的AutoCAD WS账户名

3.     密码:您的账户密码

 

 

下面的代码创建出新的WebdavClient类,连接到AutoCAD WS Webdav服务器,使用的用户名是“someuser”,密码是“123456”。

 

WebDAVClient client = new WebdavClient("https://dav.autocadws.com", "someuser", "123456");

 

PROPFIND

 

PROPFIND方法用来在AutoCAD WS账户中检索关于文件和文件夹的信息。

PROPFIND函数接收两个参数:

 

1.     远程文件路径(remoteFilePath):我们想检索信息的文件夹/文件的相对路径。

2.     深度:表示该方法是仅适用于资源(深度=0”)、仅适用于资源及其内部成员(深度=1”),还是适用于资源及其所有成员(深度=“无限”)。

 

另外,记住要订阅PropfindComplete事件的回调函数。

下列代码向服务器发送PROPFIND请求,以获取直接位于‘/Site’文件夹下的所有文件/文件夹的信息。

//subscribe to the PropfindComplete event

client.PropfindComplete += new PropfindCompleteDel(PropfindResponse);

 

// request properties of all files/folders residing directly under the 'Site' folder.

client.Propfind('/Site', 1);

 

在这个示例中,我们订阅了PropfindComplete事件的PropfindResponse函数。

PROPFIND完成之后,WebdavClient就会呼叫PropfindResponse。这个函数必须有如下签名:

//responseStr is the full XML returned by the server.

//WebdavItemInfo holds partial information about each file/folder retrieved, such as its name,

//relative path and whether it is a folder or a file.

public void PropfindResponse(String folderHref, bool requestSuccessfull, int statusCode,

                                       String responseStr, List files)

 

我们将会展示PropfindResponse函数的实施,它会将检索到主控台的所有项的名称打印出来。我们可以从WebdavItemInfo对象获取这些名称,但是为了展示如何解析这个XML,我们将会从完整的应答XML获取这些信息。

 

了解PropfindResponse函数的实施之前,我们应该看看来自Webdav服务器的响应。服务器返回一个含有文件/文件夹信息的XML。下面是这种XML的一个示例:

 

<?xml version="1.0" encoding="utf-8" ?>

<d:multistatus xmlns:D="DAV:">

  <d:response>

    <d:href>/Site/filea.dwg</D:href>

    <d:propstat>

      <d:status>HTTP/1.1 200 OK</D:status>

      <d:prop">

        <d:creationdate>2011-12-01T17:42:21-08:00</d:creationdate>

        <d:displayname>filea.dwg</d:displayname>

      </d:prop>

    </D:propstat>

  </D:response>

  <d:response>

    <d:href>/Site/fileb.dwg</D:href>

    <d:propstat>

      <d:status>HTTP/1.1 200 OK</D:status>

      <d:prop">

        <d:creationdate>2011-12-01T17:42:21-08:00</d:creationdate>

        <d:displayname>fileb.dwg</d:displayname>

      </d:prop>

    </d:propstat>

  </d:response>

</d:multistatus>

如您所见,每个文件/文件夹均返回到“d:response”标签中。在这种情况下,服务器返回“filea.dwg”和“fileb.dwg”这两个文件的信息。服务器注明了每个文件的创建日期和文件名。

下面的代码展示的是PropfindHandler函数的实施:

 

public void PropfindResponse(String folderHref, bool requestSuccessfull, int statusCode,

                                       String responseStr, List files)

{

    XmlDocument xml = new XmlDocument();

    xml.LoadXml(responseStr);

 

    XmlNamespaceManager xmlNsManager = new XmlNamespaceManager(xml.NameTable);

    xmlNsManager.AddNamespace("d", "DAV:");

    xmlNsManager.AddNamespace("WSNS", "WS");

 

    //each child node is a 'd:response' node

    foreach (XmlNode node in xml.DocumentElement.ChildNodes)

    {

        XmlNode propStatNode = node.SelectSingleNode("d:propstat", xmlNsManager);

        XmlNode propsNode = propStatNode.SelectSingleNode("d:prop", xmlNsManager);

 

        XmlNode nameNode =  propsNode.SelectSingleNode("d:displayname", xmlNsManager);

 

        String name = HttpUtility.HtmlDecode(nameNode.InnerXml);

 

        Console.Out.WriteLine(name);

}

如果以“someuser”为用户名的账户中包含文件夹“site”,而文件夹中有“filea.dwg”和“fileb.dwg”这两个文件,那么用户会看到这些文件名打印到主控台上:

filea.dwg

fileb.dwg

 

复制,移动,删除,上传

 

复制、移动和删除的调用方式和PROPFIND方法一样,只是传递的参数有所不同。

切记,您必须要订阅相应事件(DeleteCompleteCopyCompleteMoveComplete UploadComplete)的回调函数。这些事件中没有响应可解析,但是用了回调函数之后,您就会在操作完成的时候得到通知,并获知操作是否成功。

 

下列代码:

1.     copies ‘/Site/filea.dwg’ to /OtherSite/fileb.dwg’

2.     moves ‘/Site/filec.dwg’ to /OtherSite/filed.dwg’

3.     deletes ‘/Site/filee.dwg’

4.     uploads a local file from ‘c:\fileg.dwg’ to ‘/Site/fileg.dwg’

 

//subscribe to theDeleteComplete , CopyComplete  and MoveComplete events

client.DeleteComplete -= new DeleteCompleteDel(FSOpFinished);

client.CopyComplete -= new CopyCompleteDel(FSOpFinished);

client.MoveComplete -= new MoveCompleteDel(FSOpFinished);

client.UploadComplete -= new UploadCompleteDel(FSOpFinished);

 

var overwrite = true;

 

client.Copy("/Site/filea.dwg", "/OtherSite/fileb.dwg", overwrite);

client.Move( "/Site/filec.dwg", "/OtherSite/filed.dwg'" overwrite);

client.Delete("/Site/filee.dwg");

client.Upload("c:/fileg.dwg", "Site/fileg.dwg");

 

下列代码显示了FSOpFinished函数,这个函数会在成功完成请求的时候将成功信息‘success’打印到主控台,并在出错的时候将出错信息‘error’连同状态代码打印到主控台:

public void FSOpFinished(bool requestSuccessfull, int statusCode, String responseStr)

{

    if(requestSuccessfull)

    {

        Console.Out.WriteLine("success");

    }

    else

    {

        Console.Out.WriteLine("error: " + statusCode);

    }

}

AutoCAD WS中打开图纸文件

要打开图纸文件,只需调用客户端的OpenDrawing方法,以传递图纸文件的路径:

 

client.OpenDrawing("/Site/filea.dwg");

下载C#语言样例应用程序源代码

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有