建议,在DataBaseHelper的类外面,封装一个类作为代理类调用DataBaseHelper,代理类作为WCF暴露的服务
不明白,我只知道 wcf 服务实现类都有构造函数。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApplication2 { public enum DbProviders { SqlServer, OleDb, OleDb2007, Oracle, ODBC, ConfigDefined } public class DatabaseHelper:IDataBaseHelper { private static string dbConnectionStrings(DbProviders objDbProvider) { return ""; } public DatabaseHelper(string connectionstring, DbProviders objDbProvider) { } public DatabaseHelper(DbProviders objDbProvider) : this(dbConnectionStrings(objDbProvider), objDbProvider) { } public DatabaseHelper(string connectionstring) : this(connectionstring, DbProviders.SqlServer) { } public DatabaseHelper() : this(dbConnectionStrings(DbProviders.ConfigDefined), DbProviders.ConfigDefined) { } //下面则是我具体的要暴露的方法的现实 } }
这是我的部分代码,在我的类里面要怎么做修改才能使客户端访问的时候随意选择连接方式
@离合乐师:
DatabaseHelper 就是你的服务实现吗?
@Launcher: 是的 我不知道这样写行不行
@离合乐师: 你有 public DatabaseHelper() 默认构造函数可以直接用,如果没有的话,你需要重写 WCF 的实例创建,通过实现 IServiceBehavior 来自定义实例化。
楼主明显还在误区里面。
1、如果你使用WCF,这是一个服务,理论上来说,客户端不应该知道数据库在哪儿。
2、就算你想要实现多种不同的数据库连接可更改,通常的方法也是在服务端做一个配置器,可以通过服务端配置,指向不同的数据库。
3、这样才是合理的分层设计吧。你不会说需要随时随地在客户端切换数据库类型吧?
大叔说的是。我的本意是 可能会遇到复杂的编程环境,第三方的数据库可能会有ACCESS、SQLSERVER。这些可以在配置文件里面设置。我在服务端把这些情况都考虑进去。然后在客户端访问不同的数据库,我好根据实际情况传参数访问。
WCF有一个默认的不带参数的构造函数,这不过不能完全达到我的要求,所以才大胆提出疑问,能不能对这个构造函数重载。
同意 停留的风 的说法。
将DataBaseHelper作为一个服务器端的实现类。再写一个类来调用DataBaseHelper实现功能,比如:
public class Connector:IConnector
{
public DataBaseHelper GetDataBase(string connectionstring, DbProviders objDbProvider)
{
return new DataBaseHelper(connectionstring,objDbProvider);
}
}
为啥要直接调用Helper呢?不能通过工厂调用吗?将工厂封装成一个服务,调用工厂,由工厂创建对应的数据库连接
我在客户端是通过工厂代理实现访问 我上面举得例子是我直连的 没有使用WCF模式。