Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF、MySQL和事务 我在Windows通信基础服务器应用程序中的MySQL .DATA MySqLclit.MySQL事务中存在问题。_C#_Mysql_Wcf_.net 4.0 - Fatal编程技术网

C# WCF、MySQL和事务 我在Windows通信基础服务器应用程序中的MySQL .DATA MySqLclit.MySQL事务中存在问题。

C# WCF、MySQL和事务 我在Windows通信基础服务器应用程序中的MySQL .DATA MySqLclit.MySQL事务中存在问题。,c#,mysql,wcf,.net-4.0,C#,Mysql,Wcf,.net 4.0,我在实现ServiceContract接口的类的方法中使用MySqlTransaction,当我尝试运行服务时,它会抛出以下错误: System.Runtime.Serialization.InvalidDataContractException:无法序列化类型“MySql.Data.MySqlClient.MySqlTransaction”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是一个集合,请考虑用Co

我在实现ServiceContract接口的类的方法中使用MySqlTransaction,当我尝试运行服务时,它会抛出以下错误:

System.Runtime.Serialization.InvalidDataContractException:无法序列化类型“MySql.Data.MySqlClient.MySqlTransaction”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是一个集合,请考虑用CopyDATAcNoTractAttest.</P>标记它。 我在WCF服务中的代码与此类似:

[ServiceContract]
public interface IDALService
{
    MySqlCommand Command { [OperationContract] get; [OperationContract] set; }

    [OperationContract]
    void Execute(string cmdText);
}

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class DALService : IDALService
{
    public MySqlCommand Command { get; set; }

    public DALService()
    {
        Command = null;
    }

    public void Execute(string cmdText)
    {
        MySqlCommand SQLCom = this.Command??new MySqlCommand();
        SQLCom.CommandText = cmdText;

        if (this.Command == null)
        {
            SQLCom.CommandType = CommandType.Text;
            SQLCom.Connection = new MySqlConnection(/* ... */);
            SQLCom.Connection.Open();
            SQLCom.Transaction = SQLCom.Connection.BeginTransaction();
        }

        if (this.Command == null)
        {
            try
            {
                SQLCom.ExecuteScalar();
                SQLCom.Transaction.Commit();
            }
            catch { SQLCom.Transaction.Rollback(); throw; }
            finally { SQLCom.Connection.Close(); }
        }
        else SQLCom.ExecuteScalar();
    }
}
只需在“我的web浏览器”中键入即可发生错误

我正在Microsoft Visual Studio 2010 Pro中使用框架4,C#代码

请帮忙。
提前感谢。

这不可能是导致问题的代码。您收到的错误来自尝试返回或传递MySqlTransaction到/从服务。这根本行不通

另外,您究竟为什么要通过公共属性向外部世界公开命令对象?此外,它甚至没有出现你使用它。。。删除该属性,并将命令的作用域保持为使用该属性的方法。如果你不这样做,并且你作为一个单身汉运行这个服务,你会得到很多疯狂的bug


而且。。。这是一项极其危险的服务。如果你让别人使用它而不是你自己,它提供零封装。见鬼,你最好直接打开一个到SQL Server的端口,这听起来很愚蠢。

这不是你的完整执行方法,也不是编译方法。我没有看到返回语句。我们应该从编译的东西开始。我更新了我的问题(将返回类型更改为void,并删除try语句中的'Result'变量)这是DALService中唯一的方法吗?Visual Studio 2010(以及我以前使用过的所有版本)包含了一个调试器。。。请在提问之前使用它,因为这里没有人会尝试为您运行代码,除非您表现出一些努力。你至少能告诉我们发生异常的行是哪一行吗?我再次更新了我的问题(添加了我所有的代码)。对不起,我正处于开发该服务的中间,因为我没有实现服务的代码,所以我无法运行它。但是,您知道为什么在我创建的服务上运行任何方法之前都会发生错误吗?当我想用一个连接多次调用Execute方法时,我会使用它,我会回滚它或在服务外部提交它。你是说我不能在WCF中传递MySQLCommand?不,你不能。它将无法序列化。传递到WCF服务的任何内容都必须是可序列化的。想想看,如何将命令对象表示为XML字符串(我知道还有其他方法可以序列化)?答案是,你不能。我认为你最好的选择是使用命令模式,并将其传递到WCF服务,然后在服务器端将命令转换为MySQLCommands。你可以,但绝对不应该。您正在编写的服务非常危险。好的,我将尝试创建一个命令模式。此服务仅在本地网络上提供,并且只能由公司员工使用。谢谢你的回答。