WCF事务不起作用

时间:2012-12-10 08:13:11

标签: c# .net wcf

我在WCF服务中使用事务时遇到问题。我希望我的应用程序行为如下:客户端开始编辑放置在数据库中的一些数据。在他按下“编辑”按钮后,交易开始并持续到他结束编辑并按“接受”按钮。然后交易结束。问题是当他没有按“接受”并退出申请时。事务仍处于启用状态,唯一合理的解决方案是设置事务超时。我应该在哪里放置有关超时的信息,以使服务意识到事务必须在一段时间后完成?

我尝试添加属性[ServiceBehavior(TransactionTimeout="00:01:00")],但之后客户端无法访问服务。将<machineTimeout "00:01:00">添加到a​​pp.config以相同的方式结束......

详细信息:

  

下载时出错   “http://127.0.0.1:8732/Design_Time_Address/WebService/BSService/?wsdl'。   无法连接到远程服务器无法建立连接   因为目标机器主动拒绝它127.0.0.1:8732元数据   包含无法解析的引用:   'http://127.0.0.1:8732/Design_Time_Address/WebService/BSService/?wsdl'   没有端点在听   'http://127.0.0.1:8732/Design_Time_Address/WebService/BSService/?wsdl'   那可以接受这个消息。这通常是由不正确引起的   地址或SOAP操作。无法连接到远程服务器。

2 个答案:

答案 0 :(得分:0)

我们保持WCF交易相当简单。我们为各个表创建了单独的创建/修改方法。然后我们在启动事务的服务中添加了'composit'函数(使用db命令),单个表插入/更新,然后提交或回滚事务。交易结果由客户报告。

这允许客户端收集数据并应用业务规则,使用db的内置事务处理调用服务中的事务函数进行真正的数据库事务工作。

只是一个想法。

答案 1 :(得分:0)

mTransactionConnection,mTransaction和mTransactionSQLCommand是类中的私有属性,打开连接,启动事务,执行工作,提交/回滚,关闭事务。但是这个对象的实例必须贯穿整个交易。

     Public Function StartTransaction() As Boolean
        Dim result As Boolean = False

        mTransactionConnection = New SqlConnection(_ConnectionString)
        mTransactionConnection.Open()
        mTransaction = mTransactionConnection.BeginTransaction()

        result = True

        Return result

    End Function

    Public Function RunSQL(ByVal strSQL As String) As Integer

        Dim intReturn As Integer = 0

        Dim objSQLConnection As SqlConnection
        Dim objSQLCommand As SqlCommand

        objSQLConnection = New SqlConnection(_ConnectionString)
        objSQLCommand = New SqlCommand(strSQL, objSQLConnection)

        objSQLCommand.CommandType = CommandType.Text
        objSQLCommand.CommandTimeout = intCommandTimeOut

        'set  params

        objSQLConnection.Open()

        'execute SQL
        intReturn = objSQLCommand.ExecuteNonQuery()

        objSQLCommand.Dispose()

        objSQLConnection.Close()

        return intReturn

    End Function

    Public Sub CommitTransaction()

        mTransaction.Commit()

    End Sub

    Public Sub RollbackTransaction()

        mTransaction.Rollback()

    End Sub

    Public Sub CloseTransaction()

        mTransaction.Dispose()

        mTransactionConnection.Close()

        mTransaction = Nothing
        mTransactionConnection = Nothing

    End Sub