我们有一个在06年写的.dll文件,根据.net反射器,它不是.net程序集。
这个.dll的作用是允许从浏览器远程或在服务器上对IIS运行测试。当我们的客户在Windows 2003上安装了他的服务器时,他没有任何问题。自从搬到2008年以来,他无法使这项功能正常运作。
我的任务是找出原因。
该区域称之为.dll因此:
Spy.prototype.SendCommand = function( command )
{
var xmlDoc = null;
var url = this.urlBase + command;
if( "" != this.commandCode )
{
url += "&code=" + this.commandCode;
}
try
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
var rc = xmlDoc.load( url );
if( 4 == xmlDoc.readyState )
{
var err = xmlDoc.parseError;
if (err.errorCode != 0)
{
LogError( "parsing error: " + err.reason );
xmlDoc = null;
}
}
else
{
LogError( "unable to load: " + url );
xmlDoc = null;
}
}
catch( e )
{
LogError( e.description );
xmlDoc = null;
}
return xmlDoc;
}
因此:
Spy.prototype.AcquireControl = function( useForceIfNecessary )
{
var success = false;
var xmlDoc = this.SendCommand( "acquire" );
var state = this.ProcessState( xmlDoc );
if( null != state )
{
success = ( "" != this.commandCode );
if( !success && useForceIfNecessary )
{
// Unable to acquire control so applying force.
xmlDoc = this.SendCommand( "acquire/force" );
state = this.ProcessState( xmlDoc );
if( null != state )
{
success = ( "" != this.commandCode );
if( !success )
{
LogError( "unable to acquire control of spy" );
}
}
else
{
LogError( "No response from spy (with force)." );
}
}
}
else
{
LogError( "No response from spy (without force)." );
}
return success;
}
返回的是来自xmldocument的解析错误。
传递的URL是根文件夹,其中包含dll的名称,以及命令'acquire',这是我所知道的.dll附近的内部命令。
有没有人遇到这样的奇怪问题?我查看了安全设置,并确保我有脚本/执行允许。我确实与iis 6.0兼容。
这可能只是在更新的服务器上调用一个非常旧的DLL吗?如果是这样,我将如何解决/解决这个问题?
我无法访问dll上的源代码。我能够用漏斗反编译它,这就是让我理解被传递的命令'获得','获得/强制'是.dll内部的。
当我尝试直接从浏览器访问此.dll而不是通过代码时,我收到此错误:
HTTP错误500.0
有了这些细节:
模块IsapiModule 通知ExecuteRequestHandler 处理程序ISAPI-dll 错误代码0x8007007f 请求的URL /mymachine:80/ourwebap/ourdll.dll/acquire 物理路径C:\ Program Files(x86)\我们的文件夹\ ourwebappp \ www \ ourdll.dll \ acquire 登录方法协商 登录用户 * *
如果从输入的url请求中删除\ acquire开关,我会收到同样的错误。
有什么想法吗?
答案 0 :(得分:0)
显然,问题在于dll本身。
根据这篇文章: http://bytes.com/topic/net/answers/281186-isapi-dll-net-clr
IIS需要一个dll来进行这些导出:
GetExtensionVersion中 HttpExtensionProc TerminateExtension
我们的DLL没有这些导出。它是唯一的 GetFilterVersion HttpFilterProc
因此,这个DLL和问题将无法在IIS7中运行。在查看支持历史记录后,在6上运行时,该站点必须以5.0模式运行。看起来这个已经建立了一段时间了!