我在WCF服务中使用事务时遇到问题。我希望我的应用程序行为如下:客户端开始编辑放置在数据库中的一些数据。在他按下“编辑”按钮后,交易开始并持续到他结束编辑并按“接受”按钮。然后交易结束。问题是当他没有按“接受”并退出申请时。事务仍处于启用状态,唯一合理的解决方案是设置事务超时。我应该在哪里放置有关超时的信息,以使服务意识到事务必须在一段时间后完成?
我尝试添加属性[ServiceBehavior(TransactionTimeout="00:01:00")]
,但之后客户端无法访问服务。将<machineTimeout "00:01:00">
添加到app.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操作。无法连接到远程服务器。
答案 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