C# WCF、MySQL和事务 我在Windows通信基础服务器应用程序中的MySQL .DATA MySqLclit.MySQL事务中存在问题。
我在实现ServiceContract接口的类的方法中使用MySqlTransaction,当我尝试运行服务时,它会抛出以下错误: System.Runtime.Serialization.InvalidDataContractException:无法序列化类型“MySql.Data.MySqlClient.MySqlTransaction”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是一个集合,请考虑用CopyDATAcNoTractAttest.</P>标记它。 我在WCF服务中的代码与此类似: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]
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。你可以,但绝对不应该。您正在编写的服务非常危险。好的,我将尝试创建一个命令模式。此服务仅在本地网络上提供,并且只能由公司员工使用。谢谢你的回答。