IIS错误500.50:如何有字符串错误消息

时间:2017-02-13 13:37:40

标签: asp.net sql-server url redirect iis

为了将旧URL重定向到新URL,我在Windows 7的IIS 7.5中的默认网站内设置了一个DbProvider(在生产中它将在Windows Server 2012 R2中的IIS 8下)。这是我在默认网站的web.config中的配置(以便其中的每个应用程序都可以继承它:

    <rewrite>
        <providers>
            <provider name="LORYDB" type="DbProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=7.1.761.0, Culture=neutral, PublicKeyToken=0545b0627da60a5f">
                <settings>
                    <add key="ConnectionString" value="Driver={SQL Server Native Client 10.0};Data Source=localhost\sqlexpress;Initial Catalog=RewriteDB;Integrated Security=True;Server=localhost;uid=sa;pwd=xxxxxx" />
                    <add key="StoredProcedure" value="GetRewrittenUrl" />
                    <add key="CacheMinutesInterval" value="0" />
                </settings>
            </provider>
            <provider name="LORYMAP" type="FileMapProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=7.1.761.0, Culture=neutral, PublicKeyToken=0545b0627da60a5f" />
            <provider name="LORYCONTAINER" type="FileContainsProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=7.1.761.0, Culture=neutral, PublicKeyToken=0545b0627da60a5f" />
        </providers>
        <rules>
            <rule name="DbProviderTest" stopProcessing="true">
                <match url="(OmniService/foto/([0-9]+)-([0-9]+).jpg)" />
                <conditions>
                    <add input="{LORYDB:{R:1}}" pattern="(.+)" />
                </conditions>
                <action type="Redirect" url="{C:1}" />
            </rule>
        </rules>
    </rewrite>
    <tracing>
        <traceFailedRequests>
            <add path="*">
                <traceAreas>
                    <add provider="ASP" verbosity="Verbose" />
                    <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                    <add provider="ISAPI Extension" verbosity="Verbose" />
                    <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI" verbosity="Verbose" />
                </traceAreas>
                <failureDefinitions statusCodes="500" />
            </add>
        </traceFailedRequests>
    </tracing>

我很确定所有参数都是正确的,总体来说是字符串连接和存储过程,因为我试图通过一个简单的python脚本调用它们并且它们工作正常。此外,RegEX espression也是正确的,因为IIS正确检测并拆分URL(在测试阶段,这种格式为http://localhost/OmniService/foto/18443151-810079.jpg)。但是,在浏览器中我收到HTTP 500错误。所以,我在IIS中启用了模块失败请求跟踪,我得到一个非常复杂的.xml文件,我可以从中看到错误是500.50,这直接涉及重写/重定向模块,但我不确切地知道问题出在哪里是。如果您想查看xml文件,可以阅读它here。阅读一些文档,我发现当IIS_IUSRS组对C:\Windows\Temp没有完全控制权时会引发错误。我给了它许可,但没有任何改变。 我真的需要确切地了解问题所在。

例如,这个简单的python sripts可以工作:

import pypyodbc
if __name__=='__main__':
    connection=pypyodbc.connect("Driver={SQL Server Native Client 10.0};Data Source=localhost\sqlexpress;Initial Catalog=RewriteDB;Integrated Security=True;Server=localhost;uid=sa;pwd=working2014")
    cursor=connection.cursor()
    cursor.execute("exec RewriteDB.dbo.GetRewrittenUrl @input='OmniService/foto/18443151-810079.jpg'")
    print cursor.fetchone()

我得到了OmniService / foto / 2017/02/02 / 18443151-810079.jpg&#39;

这是正确的新网址。

谢谢大家。

更新

我不知道原因,但是.NET Framework不允许连接字符串Driver={SQL Server Native Client 10.0};的这一部分,因为引发了此异常:

  

System.ArgumentException:Parola chiave&#39; driver&#39;非支持者。在系统中System.Data.Common.DbConnectionOptions..ctor(String connectionString,Hashtable synonyms,Boolean useOdbcRules)中的System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable,String connectionString,Boolean buildChain,Hashtable synonyms,Boolean firstKey)中。 System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString,DbConnectionPoolGroupOptions poolOptions,DbConnectionOptions&amp; userConnectionOptions)中System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString,DbConnectionOptions previous)中的Data.SqlClient.SqlConnectionString..ctor(String connectionString)在System.Data.SqlClient.SqlConnection.ConnectionString_Set(字符串值)中的System.Data.SqlClient.SqlConnection.set_ConnectionString(字符串值)在System.Data.SqlClient.SqlConnection..ctor(String connectionString)中的DbProvider.Rewrite(字符串值) )在Microsoft.Web.Iis.Rewrite.RewriteProviderManager.InvokeProviderUnicode(String pr) oviderName,String providerInput)

我想用另一个框架(Instant Developer)测试它,它将您编写的代码转换为基于.NET Framwork的Web应用程序。 我不知道为什么,不幸的是我没有.NET Framework的经验...无论如何,它可能是一个起点

0 个答案:

没有答案