我遇到了一个似乎只影响我们的生产服务器的问题,没有任何明显的规律或原因。本质上,我们收到以下错误(我将使用虚拟名称来说明这一点):
消息:在组件 Components.services.SomeComponent 中找不到方法 someFunction,在任何实现接口中也没有任何具有此名称的默认方法。
这种情况发生在代码库中的几行不同的地方,但一旦被抛出,它就永远不会再超过该点,直到清除 CFADMIN 中的组件缓存。关键在于:代码中的违规行如下所示:
<cfset var a = createObject("Components.services.app.ComponentA").someFunction() >
似乎createObject对 create ComponentA 的调用返回的是SomeComponent的实例。我尝试过以下方法:
Components.services.app.ComponentA、Components.services.app.ComponentB等等...都是硬编码的new语法而不是createObject./Components/services/app调用(例如)“app”,这样我就可以创建像这样的对象new app.ComponentA()而不是new Components.services.app.ComponentA似乎没有什么帮助——这些在我们的 UAT 或任何人的开发环境中都无法重现,并且在生产中是间歇性的,但是,一旦抛出,服务器就完成了。清除 CFADMIN 中的组件缓存可以暂时修复它,直到几个小时后有人再次随机抛出它。
一些额外的警告:
new ComponentC()是创建someComponent...new ComponentA()而不是创建someOtherComponentsomeComponent, someOtherComponent) 是位于此目录之外的 CFC后续步骤(这些都不理想):
是否有某种方法可以精细地排除从组件缓存中检索某些 CFC,并在调用 …
我可以从VBScript启动一个新的隐藏Visual Studio进程,并通过以下方式以编程方式驱动它:
Set DTE = CreateObject("VisualStudio.DTE.8.0")
DTE.DoStuff()
Run Code Online (Sandbox Code Playgroud)
我如何在C#中做到这一点?(编辑:使用正确的类型,而不是该VBScript代码使用的通用COM对象.)
我试过这个:
using EnvDTE;
...
DTE dte = new DTE();
Run Code Online (Sandbox Code Playgroud)
但我得到"检索CLSID {3C9CFE1E-389F-4118-9FAD-365385190329}组件的COM类工厂失败".
根据
http://msdn.microsoft.com/en-us/library/ms524620.aspx
你应该使用server.createObject
如果您已熟悉VBScript或JScript,请注意您不使用脚本语言的函数来创建新的对象实例(VBScript中的CreateObject或JScript中的New).您必须使用ASP Server.CreateObject方法; 否则,ASP无法跟踪您在脚本中使用该对象的情况.
但是其他一些人认为server.createObject意味着可以避免大部分时间的开销
http://classicasp.aspfaq.com/components/should-i-use-createobject-or-server-createobject.html
CreateObject比Server.CreateObject具有更少的开销,因为后者使用MTS - 导致显着的开销.
当组件遇到错误时,您也会遇到性能命中,因为使用Server.CreateObject时,这些错误会写入事件日志(无可否认,这在调试过程中非常有用).
要么
http://www.4guysfromrolla.com/webtech/043099-1.shtml
如果您正在编写处理事务的组件,这可能会变得很重要,因为它将是一个通过MTS传递它的良好安全网,因为您将使用MTS命令.但是,如果您不使用MTS,则可以通过将其传递给Server.CreateObject来创建处理器和内存.这使得使用CreateObject更好,因为它直接通过.
所以,如果我不使用mts并且不需要访问内置的asp的对象(比如set d = createObject("scripting.dictionary")),那么忘记server.createObject并使用createobject就可以了吗?
非常感谢...
我在Windows Server 2008 R2 Standard中的IIS 7上运行了一个经典的ASP应用程序.
它在当天的某个时刻工作正常,但是在没有任何代码更改的情况下,它在实例化COM +组件时开始抛出以下错误:
MyObject = Server.CreateObject("MyCustomComponent.MyCustomObject")
Run Code Online (Sandbox Code Playgroud)
服务器对象错误'ASP 0177:80004005'
Server.CreateObject失败
/path/script.asp,第xx行
80004005
可能是什么问题呢?我做了一个互联网搜索,发现了几十个可能的答案,其中没有一个似乎与问题有任何关系.我知道我正在使用正确的对象名称 - 它刚刚工作了一段时间.什么也没有变!我花了差不多2个小时试图解决这个问题并且空洞.
我有一个DLL(用C#编写),包含一个带有2个构造函数的类; 一个默认(无参数)构造函数,另一个有3个参数.
在VBscript中,我想调用第二个构造函数,但CreateObject只接收一个classValue参数,没有可能的arguments参数.
我想底层实现CreateObject使用系统的CoCreateObject函数,根据这个答案不支持参数,但另一方面有QTP/UFT DotNetFactory能够做到这一点,所以必须有一种方法在纯VBscript中做到这一点.
(init如果可能的话,我想避免使用明显的方法解决方案).
有关如何调用非默认构造函数的任何想法?
当我从我的经典ASP页面调用Server.CreateObject()时,我得到了
Microsoft VBScript runtime (0x800A01B6)
Object doesn't support this property or method
Run Code Online (Sandbox Code Playgroud)
我尝试了以下(单独):
Server.CreateObject("Microsoft.XMLHTTP")
Server.CreateObject("MSXML2.XMLHTTP")
Server.CreateObject("MSXML.DOMDocument")
Run Code Online (Sandbox Code Playgroud)
我知道ActiveX对象已安装,因为以下javascript调用有效
var test = new ActiveXObject("Microsoft.XMLHTTP");
var test = new ActiveXObject("MSXML2.XMLHTTP");
var test = new ActiveXObject("MSXML.DOMDocument");
Run Code Online (Sandbox Code Playgroud)
我从我的localhost IIS服务器调用它.有任何想法如何解决这个问题?
我有一个旧的vbscript运行命令,foo = CreateObject(xy).我想在另一台计算机上运行此脚本(它现在不运行btw)但我不知道我应该注册哪个DLL,或者我应该做什么,来运行CreateObject命令.
我怎样才能弄清楚我需要将哪些dll复制到新计算机中,我是否需要注册它们,还应该做些什么?
或者他们可能是OCX还是其他什么?
干杯.
ColdFusion是否提供将CFC拆分为多个文件的机制?我不是在谈论扩展,我在谈论将SAME CFC拆分成多个文件; 与C#允许"部分"类相同的方式.这是因为我使用T4生成一堆CFC,我希望能够通过在另一个文件中将功能标记到生成的CFC上.我想以不违反开放原则的方式这样做.
尝试使用引用打开 PDF(-网站),该引用只能通过在父页面上单击链接打开。
通过使用
CreateObject(WinHttp.WinHttpRequest.5.1)
.setRequestHeader "referer", "https://...“
Run Code Online (Sandbox Code Playgroud)
访问有效,但我需要在浏览器中打开页面才能查看 pdf。
发现这个:
语法:object.Navigate2(URL, Flags, TargetFrameName, PostData, Headers)
( PostData [in, optional] Headers [in, optional] )
并尝试
Dim IE As InternetExplorer
Set IE = New InternetExplorer
With IE
.Navigate2
https://main...,
"https://referer..."
Run Code Online (Sandbox Code Playgroud)
没有结果!有没有人有办法解决吗?(请只使用 VBA!谢谢)
我使用.Net 3.5在C#中编写了一个支持COM interop的类库.该对象旨在为经典ASP页面提供一些实用程序功能.我编写了一个test.asp页面,该页面实例化了所需的对象并调用了它的方法.在我的机器上正常工作.
在另一台计算机(Windows Server 2003 - 标准版)上,虽然正确地向regasm注册了程序集,但它不起作用.我已经检查了注册表并且看起来没问题.
我得到的错误是"ASP 0177"(错误代码),"8000ffff; Server.CreateObject-Fehler"(错误描述),它转换为Server.CreateObject-Error.
顺便说一句.程序集已签名,并且没有任何其他自定义构建程序集作为依赖项(只是系统内容).
有人经历过类似的事吗?
createobject ×10
asp-classic ×3
com ×3
c# ×2
cfc ×2
coldfusion ×2
vbscript ×2
.net ×1
asp.net ×1
com+ ×1
com-interop ×1
constructor ×1
excel ×1
iis-7 ×1
referer ×1
vba ×1
web-scraping ×1