【发布时间】:2012-01-30 14:16:11
【问题描述】:
我们正在编写一个多租户 Silverlight 应用程序。用户使用 Windows 窗体身份验证登录,我们从表中提取该用户的连接字符串。该字符串的格式为:
Data Source=1.2.3.4; Initial Catalog=database; Persist Security Info=True; User ID=######; Password=##########
这工作正常。然后我们决定设置应用程序名称,原因是outlined here 是个好主意:
Data Source=1.2.3.4; Initial Catalog=database; Application Name=application; Persist Security Info=True; User ID=######; Password=##########
但是,现在没有建立连接,所以我们遇到了错误。这仅在已部署的站点上失败。通过 Visual Studio 运行显然不受影响。建立连接的代码没有任何变化。我愿意相信应该有变化,但我无法弄清楚它们应该是什么。
连接是这样创建的:
public class OurDataContext : DataContext
{
public OurDataContext()
: base(SessionCache.OurConnectionString)
{
....
}
}
SessionCache.OurConnectionString 是从数据库中读取的字符串。
更新
对连接字符串的更改可能是红鲱鱼。我们只在一台 Web 服务器(我无法直接访问的服务器)上遇到此故障。将属性添加到另一个 Web 服务器(我确实有权访问)引用的数据库不会重现问题。这使我得出结论,错误在其他地方。但是,我仍然没有更接近解决这个问题。
实际的错误是异常:
An exception of type 'System.ServiceModel.DomainServices.Client.DomainOperationException' occurred and was caught.
------------------------------------------------------------------------------------------------------------------
01/31/2012 14:18:53
Type : System.ServiceModel.DomainServices.Client.DomainOperationException, System.ServiceModel.DomainServices.Client, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Message : Load operation failed for query 'GetUserSecurityConfig'. The remote server returned an error: NotFound.
Status : ServerError
ErrorCode : 0
Data : System.Collections.ListDictionaryInternal
Stack Trace : The stack trace is unavailable.
我今天对此所做的所有研究都返回了一些不应该改变的相当基本的东西:
- System.ComponentModel.DataAnnotations、System.ServiceModel.DomainServices.EntityFramework、System.ServiceModel.DomainServices.Hosting 和 System.ServiceModel.DomainServices.Server 未复制到 \bin 目录。我已经检查过了。
- 连接到数据库服务器时出错。我不认为这是表单身份验证有效的情况。它是服务器上的不同数据库,但凭据相同。
【问题讨论】:
-
我不是 SQL Server 专家,但我会尝试删除“持久安全信息”部分,看看它是否有帮助...另一点:“应用程序”是否包含任何空格或类似内容?
-
@Yahia - “应用程序”中没有空格。 “Persist Security Info”需要为真才能取回用户名和密码Source
-
您是否在部署的数据库中配置了“应用程序”?
-
@HenkHolterman - 你能详细说明一下吗?目前我只是在捡起刚刚坏掉的东西。快速的解决方案是从连接字符串中删除“应用程序名称”,但我需要知道它为什么会中断,以便我们将其放回去。
-
只是为了它,使用
SqlConnectionStringBuilder(connectionString)创建一个测试连接字符串并从那里设置应用程序名称。看看这是否有效。也许你有一些愚蠢的格式或无效的字符错误。另外,您是否尝试过不同的应用程序名称?我不是 SQL DB 方面的专家,但如果它是共享的,则可能其他一些应用程序已经与该应用程序名称连接。不知道会不会有问题。
标签: c# silverlight connection-string wcf-ria-services