【发布时间】:2012-01-24 04:24:12
【问题描述】:
我在 Windows Communication Foundation Server 应用程序中的 MySql.Data.MySqlClient.MySqlTransaction 中遇到问题。
我在实现 ServiceContract 接口的类的方法中使用 MySqlTransaction,当我尝试运行服务时它会抛出此错误:
System.Runtime.Serialization.InvalidDataContractException:无法序列化类型“MySql.Data.MySqlClient.MySqlTransaction”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果类型是集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。
我在 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();
}
}
在我的网络浏览器中输入http://localhost:1257/DALService.svc 就会发生错误。
我在 Microsoft Visual Studio 2010 Pro 中使用 Framework 4,C# 代码。
请帮忙。 提前致谢。
【问题讨论】:
-
这不是您的完整 Execute 方法,或者无法编译。我没有看到退货声明。我们应该从可以编译的东西开始。
-
我更新了我的问题(将返回类型更改为 void,并删除 try 语句中的 'Result' 变量)
-
这是DALService中唯一的方法吗?
-
Visual Studio 2010(以及所有以前的版本我已经工作过)包含一个调试器...请在询问 SO 问题之前使用它,因为这里没有人除非您付出一些努力,否则将尝试为您运行您的代码。您能至少告诉我们异常发生在哪一行 line 上吗?
-
我再次更新了我的问题(添加了我的所有代码)。抱歉,我正在开发该服务,我还不能运行它,因为我没有代码来实现该服务。但是你知道为什么在我创建的服务上运行任何方法之前就会发生错误吗?