Crystal Reports在Azure云服务中引发数据库登录失败错误

问题描述

我正在努力查看为什么Crystal Reports使用与连接时没有问题的.NET应用程序相同的凭据时,为什么失败并显示“数据库登录失败”消息。在Azure中作为云服务运行应用程序,连接到Azure SQL数据库。 Crystal运行时已安装为启动任务。

在本地调试中一切正常,但是在部署时由于相同的登录错误而失败。

我尝试了几件事,但都无济于事。安装了Crystal Reports运行时,我有一个StartUp.cmd文件,其中:

msiexec.exe /I "CR13SP29MSI64_0-10010309.msi" /qn
robocopy D:inetpubwwwroot E:sitesroot /S

我正在部署根目录为CR13SP29MSI64_0-10010309.msi的应用程序,并在ServiceDefinition.cscfg中定义了一个启动任务,

<Startup>
  <Task commandLine="StartUp.cmd" executionContext="elevated" taskType="background" />
</Startup>

请注意,如果我RDP到云服务并运行MSI,则会询问我是否要重新安装,因此安装本身看起来很好。

尝试使用运行报告

doc.SetDatabaseLogon(conn.UserID,conn.Password,conn.ServerName,conn.DatabaseName,true);

其中docReportDocument,而conn包含有效的凭证。

还尝试从config中读取并使用DataSourceConnections ...

var connString = ConfigurationManager.ConnectionStrings["myEFconnection"].ConnectionString;

var sCon = new SqlConnectionStringBuilder(connString);

doc.DataSourceConnections[0].SetConnection(sCon.DataSource,sCon.InitialCatalog,sCon.UserID,sCon.Password);

用户和密码正确,myEFconnection是应用程序使用的,一切正常,而且在连接到Azure SQL DB的Visual Studio中,所有这些都可以在相同的配置下正常工作。因此,显然不是用户名和密码问题,也不能成为防火墙,否则其他应用程序功能将失败。还有什么?

任何帮助都值得赞赏,因为错误特别无济于事,我对其他地方感到困惑。

解决方法

通过您的描述,我很清楚您的问题以及您尝试过的事情。

所以我只能给您一些故障排除建议。

  1. 首先,通过RDP登录到云服务的PC并检查程序的配置文件中的字符串myEFconnection。它是否与您期望的本地测试或配置信息一致? (确保程序配置一致且正确。)

connectionStrings: should be like below

<connectionStrings>
    <add name="SchoolDBEntities" connectionString="metadata=res://*/SchoolDB.csdl|res://*/SchoolDB.ssdl|res://*/SchoolDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=SchoolDB;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
</connectionStrings> 
  1. 暂时关闭azure sqlserver的防火墙设置以进行测试。 (确保这不是防火墙问题)

  2. 使用ssms工具连接到Azure SQL,并检查它是否可以成功。 (确保sql server服务正常)

  3. Raise a support on portal for help.

,

我找不到解决方案。结果,我迁移到了Telerik。当然,这并非没有痛苦,但是迁移所花费的时间少于尝试解决晶体问题所花费的时间。

如果Crystal的任何人感兴趣,那么这里的根本问题是在错误中提供的信息不足。调用堆栈不会暴露给最终用户,也不会登录到事件查看器中,因此无法查看,任何内部异常都会被吞下并丢弃,而是包裹在一个非常无用的高级通用错误“数据库登录失败”中。

我毫不怀疑,只要有可能看到真正的问题,根本的问题就很容易解决。我希望您以后能解决此问题,否则我只能想象您将把更多的业务交给Progress Software和Telerik团队。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...