首页 新闻 会员 周边

WCF 服务实现的类 是否能用构造函数

0
悬赏园豆:200 [已解决问题] 解决于 2014-04-21 14:38

  一开始,我是直接建了一个DataBaseHelper类,通过重载构造函数的方式实现连接数据库的多种方式。现在的问题是这样的:假如我将这个DataBaseHelper写在WCF服务中,该如何保留我的多种访问方式?

王萧萧Xiao的主页 王萧萧Xiao | 初学一级 | 园豆:22
提问于:2014-04-15 11:57
< >
分享
最佳答案
1

建议,在DataBaseHelper的类外面,封装一个类作为代理类调用DataBaseHelper,代理类作为WCF暴露的服务

收获园豆:100
停留的风 | 菜鸟二级 |园豆:302 | 2014-04-15 13:29
其他回答(4)
0

不明白,我只知道 wcf 服务实现类都有构造函数。

Launcher | 园豆:45045 (高人七级) | 2014-04-15 13:11
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)
        {
        }

        //下面则是我具体的要暴露的方法的现实

    }
}

这是我的部分代码,在我的类里面要怎么做修改才能使客户端访问的时候随意选择连接方式

支持(0) 反对(0) 王萧萧Xiao | 园豆:22 (初学一级) | 2014-04-15 13:46

@离合乐师: 

DatabaseHelper 就是你的服务实现吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-04-15 13:49

@Launcher: 是的 我不知道这样写行不行

支持(0) 反对(0) 王萧萧Xiao | 园豆:22 (初学一级) | 2014-04-15 13:50

@离合乐师: 你有 public DatabaseHelper() 默认构造函数可以直接用,如果没有的话,你需要重写 WCF 的实例创建,通过实现 IServiceBehavior 来自定义实例化。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-04-15 13:58
0

楼主明显还在误区里面。

1、如果你使用WCF,这是一个服务,理论上来说,客户端不应该知道数据库在哪儿。

2、就算你想要实现多种不同的数据库连接可更改,通常的方法也是在服务端做一个配置器,可以通过服务端配置,指向不同的数据库。

3、这样才是合理的分层设计吧。你不会说需要随时随地在客户端切换数据库类型吧?

收获园豆:50
爱编程的大叔 | 园豆:30839 (高人七级) | 2014-04-15 14:39

  大叔说的是。我的本意是 可能会遇到复杂的编程环境,第三方的数据库可能会有ACCESS、SQLSERVER。这些可以在配置文件里面设置。我在服务端把这些情况都考虑进去。然后在客户端访问不同的数据库,我好根据实际情况传参数访问。

WCF有一个默认的不带参数的构造函数,这不过不能完全达到我的要求,所以才大胆提出疑问,能不能对这个构造函数重载。

支持(0) 反对(0) 王萧萧Xiao | 园豆:22 (初学一级) | 2014-04-15 14:46
0

同意 停留的风 的说法。

 

将DataBaseHelper作为一个服务器端的实现类。再写一个类来调用DataBaseHelper实现功能,比如:

public class Connector:IConnector

{

     public DataBaseHelper GetDataBase(string connectionstring, DbProviders objDbProvider)

    {

       return new DataBaseHelper(connectionstring,objDbProvider);

    }

}

收获园豆:50
于为源 | 园豆:956 (小虾三级) | 2014-04-15 15:04
0

为啥要直接调用Helper呢?不能通过工厂调用吗?将工厂封装成一个服务,调用工厂,由工厂创建对应的数据库连接

烧点饭 | 园豆:68 (初学一级) | 2014-04-15 17:08

  我在客户端是通过工厂代理实现访问 我上面举得例子是我直连的 没有使用WCF模式。

支持(0) 反对(0) 王萧萧Xiao | 园豆:22 (初学一级) | 2014-04-15 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册