rumor 发表于 2011-9-10 22:39:12

AutoCAD WS APIs – C# Client[教程]

  本教程旨在为您示范如何用WebdavClient C#语言类对AutoCAD WS账户中的文件和文件夹执行各种操作。
  使用这个C#语言类,您可以——连接到一个AutoCAD WS账户上
  1. 查询账户文件/文件夹结构
  2. 执行不同的文件操作,例如复制、粘贴、重命名、创建文件夹
  3. 上传和下载文件
  4. 查询文件元数据,例如最后修改、权限、缩略图
  5. 在WS在线编辑器中启动图纸文件
  WebdavClient类使用WebDAV协议来和AutoCAD WS服务进行通信。WebdavClient C#语言类依靠标准的WebDAV协议来和AutoCAD WS服务进行通信。C++、C#、Java和JavaScript等多种编程语言都支持这个基于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的一个示例:
  
  
  
  /Site/filea.dwg
  
  HTTP/1.1 200 OK
  
  2011-12-01T17:42:21-08:00
  filea.dwg
  
  
  
  
  /Site/fileb.dwg
  
  HTTP/1.1 200 OK
  
  2011-12-01T17:42:21-08:00
  fileb.dwg
  
  
  
  
  如您所见,每个文件/文件夹均返回到“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方法一样,只是传递的参数有所不同。
  切记,您必须要订阅相应事件(DeleteComplete、CopyComplete、MoveComplete、 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#语言样例应用程序源代码。
  以上来自 欧特克AU技术社区http://au.autodesk.com.cn
页: [1]
查看完整版本: AutoCAD WS APIs – C# Client[教程]