乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 120|回复: 9

自动化

[复制链接]

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2015-8-21 19:07:37 | 显示全部楼层 |阅读模式
使用VS 2015 Community使用AutoCAD做更多自动化项目,并需要有关如何解决此问题的建议。使用此项目可以在8小时的轮班中使用40-60名用户,因此其想法是让它执行、完成然后等待下一个请求。因此,始终保持AutoCAD实例很重要,但此块可以以任何方式处理它。问题是AutoCAD有时需要1-2分钟才能真正加载,所以这就是我们保持它准备就绪的原因,但那是为了另一篇文章。
好的,所以AutoCAD就坐在那里,有它的开始屏幕,当一个请求通过网络传入时,C#项目就会开始运行。一切都很好。除了我在桌面上尝试它。我的桌面上有与运行这个自动化项目的服务器相同版本的AutoCAD。但是在我的计算机上,相同的代码每次都会打开一个新的AutoCAD实例。它的行为永远不会像部门中的其他计算机一样,只是使用现有的AutoCAD开放实例。我已经检查了我知道如何做的所有事情,但结果看起来并不好。
  1. class LaunchAutoCAD
  2.     {
  3.         private static IAcadApplication vAcadApp = null;
  4.         private static IAcadDocument vAcadDoc = null;
  5.         // CHANGE THIS TO AutoCAD.Application.20 FOR ACAD 2015/16
  6.         private static string vAcadID = "AutoCAD.Application.20";
  7.         public static void StartAutoCAD()
  8.         {
  9.             try
  10.             {
  11.                 // Check for instance of AutoCAD
  12.                 vAcadApp = (IAcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject(vAcadID);
  13.             }
  14.             catch (Exception) // If none found start a new instance of AutoCAD
  15.             {
  16.                 System.Type AcadProg = System.Type.GetTypeFromProgID(vAcadID);
  17.                 vAcadApp = (IAcadApplication)System.Activator.CreateInstance(AcadProg);
  18.             }
  19.             if (vAcadApp != null)
  20.             {
  21.                 vAcadApp.Visible = true;
  22.                 .
  23.                 do a bunch of stuff with SendCommands
  24.                 .
  25.             }
  26.             else
  27.             {
  28.                 Console.WriteLine("ERROR: The drawing file is missing.");
  29.                 Console.ReadKey();
  30.             }
  31.         }
  32.    }

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2015-8-21 22:45:32 | 显示全部楼层
听起来像是在您的尝试捕获块中反复引发异常,导致重复调用System.Activator.CreatInstance(),而您可以使用Process Class分别有效地获取或创建/一个实例。
当您在工作站上执行代码时会发生什么?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2015-8-22 09:40:44 | 显示全部楼层
这不是对你问题的直接回答,但我认为它会有所帮助:
让一个AutoCAD实例运行并等待响应多个自动化请求是一种不可靠的设计,我认为:由于AutoCAD一次只能做一件事,你如何确保不会有超过两个重叠的请求出现,从而导致客户端应用程序(用户端)甚至AutoCAD实例崩溃?由于40-60个用户可能从他们的客户端应用程序发送请求,根据应用程序的性质,并发请求的机会可能足够高,足以保证流程失败。
考虑到这一点,您可能希望以不同的方式设计该过程:让AutoCAD实例在计算机(服务器计算机)启动时启动。并定期检查存储在Que中的请求。用户的应用程序将请求发送到Que,而不是直接发送到AutoCAD。通过这种方式,您可以有效地分离这两个应用程序,这样每个应用程序都可以工作,而不会干扰其他应用程序(这样用户应用程序就不必尝试获取现有的AutoCAD实例,或者创建一个实例)。它根本不在乎;只需将请求放入que中)。
当然,我们不讨论以这种方式运行AutoCAD是否违反许可的问题。您可以考虑使用AutoCAD控制台,它是为这种“服务器类型”使用而设计的,实际上最好是实例化每个AutoCAD控制台来处理每个图形。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2015-8-22 13:23:57 | 显示全部楼层
虽然这是一个非常恰当的观点,但是关于并发请求,我并不喜欢按需并发实例,因为这也很容易淹没服务器的可用资源。
除非存在足够的代码逻辑来首先确定bing实例的最大数量,然后通过将指令转储到文件来对剩余的传入请求进行排队,一旦一个或多个允许的实例变得可用,监视器就会评估这些指令。
即使只有一个允许的实例,我认为队列过程从一开始就更有意义,因为它也可以用于向请求用户报告...在你的前面有4个请求,等等
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-8-22 17:56:51 | 显示全部楼层
我没有研究过,也不太了解它,但这不是AutoCAD IO的设计目的吗?
回复

使用道具 举报

51

主题

613

帖子

9

银币

中流砥柱

Rank: 25

铜币
815
发表于 2015-8-23 09:38:27 | 显示全部楼层

也许吧,但AIOAPI明确要求图形可以通过HTTP访问,我觉得OP使用的是内部/域服务器
不确定OP安全要求,但如果我将他们的机密数据发布给Autodesk,我的任何客户都不会高兴,即使只是向Autodesk发布,将未声明的风险放在一边<干杯
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2015-8-23 19:45:53 | 显示全部楼层
您可能需要在 AutoCAD 进程前面设置一个调度程序来限制 AutoCAD 实例并处理作业。Core Console会更好地做到这一点,主要是因为它要轻得多。使用AutoCAD客户端应用程序的合法性超出了此回复的范围,如果它支持服务器操作系统,RealDwg将是一个解决方案,我认为它不这样做。
我相信AutoCAD可以从私人地方(如DropBox文件夹,AutoCAD 360等
)检索图纸,嗯,(在这里试图外交)您在哪个船锚上运行AutoCAD,需要1-2分钟才能加载?我当天第一次在我使用的笔记本电脑上加载,包括我施加的所有各种插件,只需要不到15秒,后续(缓存)加载大约是10秒。我认为这比我拥有的其他PC慢。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2015-8-24 07:59:17 | 显示全部楼层
感谢所有回复,但这不是让AutoCAD服务器不堪重负的问题。实际上,这只是一个运行Xampp和AutoCAD的Windows 7盒子,在Xampp中的php代码需要时调用C#可执行文件。我们确实有一个限制方法来防止一次发送太多请求。它仍然需要一些改进,但这并不是我真正遇到的问题。我的桌面与另一个桌面几乎相同,当我在其上运行该代码时,它总是启动一个新的AutoCAD实例。我可以在另一个Windows 7桌面上运行相同的代码,一切都很好。我刚才在另一个Windows 7盒子上测试了这个,它工作正常。所以我的安装有问题,导致它每次都调用一个新实例。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-8-24 08:07:06 | 显示全部楼层
在您的问题框中,“SDI”的值是多少?如果是1,请尝试将其设置为0。
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2015-8-24 20:16:17 | 显示全部楼层
如果您在后台进行任何打印,请选中“BACKGROUNDPLOT”=0
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 00:50 , Processed in 0.158016 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表