C# 修改WCF数据服务5.6中的connectionString

C# 修改WCF数据服务5.6中的connectionString,c#,wpf,oracle,odata,wcf-data-services,C#,Wpf,Oracle,Odata,Wcf Data Services,我使用的是Oracle DataAccess(最后一个),里面有很多数据库用户。因此,我想在我的客户机应用程序(WPF)中创建connectionString并将其传递给服务器。我正在服务器中执行以下操作: protected override POSContext CreateDataSource() { HttpRequest req = HttpContext.Current.Request; if (req.Headers != null && Arra

我使用的是Oracle DataAccess(最后一个),里面有很多数据库用户。因此,我想在我的客户机应用程序(WPF)中创建connectionString并将其传递给服务器。我正在服务器中执行以下操作:

protected override POSContext CreateDataSource()
{
    HttpRequest req = HttpContext.Current.Request;

    if (req.Headers != null && Array.FindIndex(req.Headers.AllKeys, c=>c.Equals("db", StringComparison.OrdinalIgnoreCase)) > 0)
    {
        string database = req.Headers["db"]; 
        string user = req.Headers["user"];
        string pass = req.Headers["pass"];

        StringBuilder conexion = new StringBuilder();
        conexion.Append("DATA SOURCE=");
        conexion.Append(database);
        conexion.Append(";USER ID=");
        conexion.Append(user);
        conexion.Append(";PASSWORD=");
        conexion.Append(pass);

        if (!string.IsNullOrEmpty(conexion.ToString()))
            return new POSContext(conexion.ToString());
    }

    return null;//new POSContext();
}  
在客户端中,我有以下代码:

var context = new POS.DataServices.POSContext(new Uri(Storage.Current.UrlService)); // Something like this http://localhost/POService.svc
context.BuildingRequest += (s, args) => //Or SendingRequest2 produces the same result
{
    args.Headers.Add("db", Storage.Current.Configuraciones.DB);
    args.Headers.Add("user", Storage.Current.Configuraciones.UserName);
    args.Headers.Add("pass", Storage.Current.Configuraciones.Password);
};

MessageBox.Show(proxy.POS_CIUDAD.ToList().FirstOrDefault().CIU_DESC); //Alert the city name  

当我调试我的应用程序时,我有一个错误(请求错误)。我的客户端代码试图先显示消息,然后转到BuildingRequest。如何在实体调用之前传递connectionString?

CreateDataSource在服务启动时被调用一次,这就是为什么会出现错误

我认为你可以尝试以下方法:

  • 在POSContext上添加一个连接字符串作为属性,并为POSContext提供一个无参数构造函数。这就是可以稍后设置的连接字符串。也许您需要确保只有在连接字符串准备就绪时才设置连接
  • 重写OnStartProcessingRequest方法,并更改CurrentDataSource(POSContext类)上的连接字符串

  • 任何人甲骨文不可能做到这一点吗?