2 zhaoshiwu zhaoshiwu 于 2014.12.18 15:58 提问

wcf使用单利模式创建类发生异常

我在wcf服务中.自定义一个类目的是连接数据库,这个类是通过单利模式创建的.但是在客户端调用的时候,这个类竟然无法创建对象.请wcf高手看看.

 public class TestSer : ITestSer
{
...
public LoginParam GetLoginObj()
{
LoginParam loginobj = null;
MySQLHelper sqlhelper = MySQLHelper.CreatInstance();//自定义类用于连接数据库
string sqlstr = "select * from c_task";
int execcount = 0;
try
{
execcount = sqlhelper.ExecuteMySqlNonQuery(sqlstr, System.Data.CommandType.Text);
}
catch (Exception)
{
execcount = -1;
}

        if (execcount < 0)
        {
            loginobj = null;
        }
                     else
        {
            //这里由于没有创建数据库,所以暂时用假数据.
            loginobj = new LoginParam();
            loginobj.TaskID = "123450";
            loginobj.AcceptLanguage = "1";
            loginobj.LoginUrl = "http://www.baidu.com"; ;
            loginobj.UserName = "张三";
            loginobj.PassWord = "954471364";
        }
        return loginobj;
    }
}

4个回答

caozhy
caozhy   Ds   Rxr 2014.12.18 17:06

你怎么会想起来在客户端调用这个类呢?wcf不能远程调用那些无法通过序列化传输的对象,而且你的整个思路都错了。

你应该在服务器端就把业务逻辑做好,客户端调用服务器上的业务,而不是通过服务器直接操作数据库。

zhaoshiwu
zhaoshiwu   2014.12.18 16:00

public class TestSer : ITestSer
{
...
public LoginParam GetLoginObj()
{
LoginParam loginobj = null;
MySQLHelper sqlhelper = MySQLHelper.CreatInstance();//自定义类用于连接数据库
string sqlstr = "select * from c_task";
int execcount = 0;
try
{
execcount = sqlhelper.ExecuteMySqlNonQuery(sqlstr, System.Data.CommandType.Text);
}
catch (Exception)
{
execcount = -1;
}

        if (execcount < 0)
        {
            loginobj = null;
        }
                     else
        {
            //这里由于没有创建数据库,所以暂时用假数据.
            loginobj = new LoginParam();
            loginobj.TaskID = "123450";
            loginobj.AcceptLanguage = "1";
            loginobj.LoginUrl = "http://www.baidu.com"; ;
            loginobj.UserName = "张三";
            loginobj.PassWord = "954471364";
        }
        return loginobj;
    }

}


zhaoshiwu
zhaoshiwu   2014.12.18 16:02

这是里面的创建实例的方法

 public static MySQLHelper CreatInstance()
        {
            if (_instance == null)
            {
                lock (_lockobj)
                {
                    if (_instance == null)
                    {
                        try
                        {
                            _instance = new MySQLHelper();
                        }
                        catch (Exception ex)
                        {
                            string meg = ex.Message.ToString();
                        }
                    }
                }
            }
            return _instance;
        }
feiyun0112
feiyun0112   Rxr 2014.12.18 16:08

具体哪句报错?什么错?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!