在iis 7中加载.dll的问题

时间:2013-12-12 18:07:13

标签: iis-7

我们有一个在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开关,我会收到同样的错误。

有什么想法吗?

1 个答案:

答案 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模式运行。看起来这个已经建立了一段时间了!