我创建了一个ComVisible DLL,它是用给定的域名(我工作的公司)签名的。我把这个DLL放到客户的web主机上,它运行在不同的域中,并使用: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs注册它
DLL在客户web主机的本地磁盘上创建XLSX文件。用户可以通过浏览器下载此文件。
如果我有一个对客户的web主机开放的远程桌面会话,则DLL将按预期的方式工作,并且客户可以下载创建的临时文件。
但是,一旦我删除了远程桌面会话(我不注销并将VPN连接起来),DLL就不再可访问。临时文件不再由asp经典站点创建,客户当然无法对未创建的文件进行流。
有什么能导致这一切的想法吗?web服务器不会生成错误。
我认为DLL是用不同的域名签名的,那么web服务器主机就是问题的一部分,但是无法想象为什么打开远程桌面会话(我只是使用微软的mstsc )来解决这个问题。
发布于 2016-04-21 15:18:51
最后,我从AssemblyInfo.cs中删除了以下代码:
[assembly: ComVisible(true)]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationAccessControl(false,
AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent)]我将ComVisible和Guid调用移动到要向COM公开的类的修饰器,现在DLL总是正确实例化,并且工作正常。
我现在还通过以下方式登记:
RegAsm.exe d:\foo\bar.dll /codebase /tlb发布于 2016-04-20 21:42:16
如果您正在处理XLSX文件并获得此行为,我非常确信您使用的是Office.Interop类。使用那些互操作COM类在IIS内部不支持。如果您确实尝试从IIS内部使用它,您将得到与您所描述的行为完全相同的行为。
您必须切换到像为Office打开XML这样的不同库来创建XLSX文件。
RDP在其中工作的原因是互操作dll需要一个桌面会话才能正常工作。当您是RDPed时,有一个会话可供它使用,一旦断开连接,就不再有会话可供使用。
https://stackoverflow.com/questions/36753596
复制相似问题