我正在尝试将 ASP.Net (2.0) VB Web 应用程序从 SLES 11 服务器迁移到新的 SLES 12 服务器。不幸的是,Novell / SUSE / NetIQ 人员不再支持 mono。
这是我第一次开发 mono / mod_mono Apache 组合。这是一次很好的学习经历。我不确定我是否已正确排列所有内容(单声道版本/存储库/配置)。自 Visual Studio 2008 以来发生了很多变化。我希望前 Novell 或其他 Mono 专家可以帮助我解决问题。
因此,经过一番努力,我设法获得了一个可行的解决方案,但我似乎无法加密 web.config。保护调用不会生成加密的 web.config connectionStrings 部分,而是会占用文件的大部分内容,并给出包含以下消息的错误页面
System.Xml.XmlException
根元素缺失。
难怪网络配置减少到......
<?xml version="1.0" encoding="utf-8"?>
<configuration><appSettings>
</appSettings></configuration>
从
?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
</appSettings>
<connectionStrings>
<add name="websalesConnectionString" connectionString="server=192.168.85.15;User Id=zzzz;password=zzzz;Persist Security Info=True;database=websales" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<system.web>
<authentication mode="Windows" />
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
<compilation debug="true" strict="false" explicit="true">
<assemblies>
<add assembly="*" />
</assemblies>
</compilation>
<customErrors mode="Off" />
<pages>
<namespaces>
<clear />
<add namespace="System" />
<add namespace="System.Collections" />
<add namespace="System.Collections.Generic" />
<add namespace="System.Collections.Specialized" />
<add namespace="System.Configuration" />
<add namespace="System.Text" />
<add namespace="System.Text.RegularExpressions" />
<add namespace="System.Web" />
<add namespace="System.Web.Caching" />
<add namespace="System.Web.SessionState" />
<add namespace="System.Web.Security" />
<add namespace="System.Web.Profile" />
<add namespace="System.Web.UI" />
<add namespace="System.Web.UI.WebControls" />
<add namespace="System.Web.UI.WebControls.WebParts" />
<add namespace="System.Web.UI.HtmlControls" />
</namespaces>
</pages>
</system.web>
</configuration>
这是调用进行加密的方法(文件吞噬)
Public Sub webencrypt(ByVal lEncrypt As Boolean)
Dim config As Configuration = WebConfigurationManager.OpenWebConfiguration("~")
Dim configSection As ConfigurationSection = config.GetSection("connectionStrings")
If lEncrypt Then
If Not configSection.SectionInformation.IsProtected Then
configSection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider")
config.Save()
End If
End If
End Sub
我努力了代码来自:http://www.developersalley.com/blog/post/2011/11/22/How-To-Protect-Webconfig-File.aspx
以及来自: http://devproconnections.com/aspnet/encrypting-configuration-file-sections
版本信息
- Apache2 (2.4.16)
- Apache2-mod-mono (3.12-1)
- 单声道 (4.2.2.30)
- ASP.NET (2.0)
mod-mono-serverX.exe
另一个谜团是 mod-mono-server2.exe 错误出现在 apache 日志中。 为什么要调用 mod-mono-server2.exe(其包装在 /usr/bin 中)?
无法打开程序集“/usr/lib/mono/2.0/mod-mono-server2.exe”:没有此文件或目录。
我专门使用 apache mod_mono 指令 MonoServerPath 来调用 mod-mono-server4.exe。
... MonoServerPath webtest "/usr/bin/mod-mono-server4" ...
哪个调用
/usr/lib/mono/4.5/mod-mono-server4.exe
这指向
mod-mono-server4.exe -> ../gac/mod-mono-server4/4.2.0.0__0738eb9f132ed756/mod-mono-server4.exe
mod-mono-server2.exe 未随最新的 mono AFAIK 一起安装。需要进行许多组合/测试才能弄清楚这一点,因为文档仍然引用 ASP 1 的 mod-mono-server 和 ASP 2 的 mod-mono-server2 .... 而没有提及 mod-mono-server4。
我可以忽略这些错误和/或将单声道包装器重新指向所有指向 mod-mono-server4 的...但这也感觉不对。