【发布时间】:2018-09-30 01:30:40
【问题描述】:
首先我想说我不是 SL 开发人员。我只需要修改一个旧版 Silverlight 5 应用程序。
它使用 RIA 服务,XAP 托管在 Asp.Net 页面中。
登录页面上的用户输入凭据并能够从下拉列表中选择数据库。整个网络正在使用多个连接,用户可以选择要连接的数据库。
这个选定的数据库(或任何用于数据连接的标识符)是通过 XAP 的 InitParams 发送的,所以我可以从 SL 访问它。
private void Application_Startup(object sender, StartupEventArgs e)
{
foreach (var item in e.InitParams)
{
Resources.Add(item.Key, item.Value);
}
var selectedConnectionString = GetInitParam("ConnectionString");
// TODO: Different way to store connection string
SetCookie("ConnectionString", selectedConnectionString);
RootVisual = new LoadingPage();
}
目前我正在尝试使用 cookie 来存储选定的数据库。我在某处发现它是一种可能的解决方案。但它需要改变。
好的,那么我们就有了 DomainService。
public class CommissionDomainService : LinqToEntitiesDomainService<CommissionEntitiesContext>
{
...
}
我知道我需要使用CreateObjectContext 来更改服务中的 ConnectionString。所以我有:
protected override CommissionEntitiesContext CreateObjectContext()
{
// TODO: Different way to store connection string
string connectionStringName;
if (System.Web.HttpContext.Current.Request.Cookies["ConnectionString"] != null)
{
connectionStringName = System.Web.HttpContext.Current.Request.Cookies["ConnectionString"].Value;
}
else
{
throw new Exception("Missing connectionStringName");
}
var connectionStringSettings = ConfigurationManager.ConnectionStrings[connectionStringName];
var entityCs = new EntityConnectionStringBuilder
{
Metadata = "res://*/CommissionEntities.csdl|res://*/CommissionEntities.ssdl|res://*/CommissionEntities.msl",
Provider = connectionStringSettings.ProviderName,
ProviderConnectionString = connectionStringSettings.ConnectionString
};
return new CommissionEntitiesContext(entityCs.ConnectionString);
}
再次,我使用 Cookie 将值从应用程序传递到服务。
但这不是最好的主意。因为 cookie 和持久性等原因。
我的问题是,如何将我的 ConnectionString 值从主应用程序传递到 DomainService?或者我可以从服务访问一些应用程序上下文吗?或者我可以在 EntitiesContext 的某个地方获取连接字符串吗?
【问题讨论】:
标签: asp.net silverlight wcf-ria-services silverlight-5.0 ria