1

WCF サービスでのトランザクションの使用に問題があります。アプリを次のように動作させたいと思います: クライアントは、データベースに配置されたデータの編集を開始します。「編集」ボタンを押した後、トランザクションが開始され、編集を終了して「同意」ボタンを押すまで続きます。その後、取引は終了します。問題は、彼が「同意する」を押してアプリケーションを終了しない場合です。トランザクションはまだオンであり、唯一の合理的な解決策はトランザクション タイムアウトを設定することです。しばらくしてからトランザクションを終了する必要があることをサービスに認識させるには、タイムアウトに関する情報をどこに置く必要がありますか?

属性を追加しようとしました[ServiceBehavior(TransactionTimeout="00:01:00")]が、その後クライアントがサービスにアクセスできなくなります。app.config<machineTimeout "00:01:00">への追加は同じ方法で終了します...

詳細なメッセージ:

ダウンロード中にエラーが発生しました ' 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 アクションが正しくないことが原因です。リモートサーバーに接続できません。

4

2 に答える 2

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
于 2012-12-11T12:20:04.593 に答える
0

WCF トランザクションはかなりシンプルに保ちました。個々のテーブルに対して個別の作成/変更メソッドを作成しました。次に、(db コマンドを使用して) トランザクションを開始し、個々のテーブルを挿入/更新してから、トランザクションをコミットまたはロールバックするサービスに「composit」関数を追加しました。から取引結果がクライアントに報告されました。

これにより、クライアントはデータを収集してビジネス ルールを適用できるようになり、サービスでトランザクション関数を呼び出すことで、db に組み込まれたトランザクション処理を使用して真のデータベース トランザクション作業を行うことができました。

ただのアイデア。

于 2012-12-10T12:14:35.993 に答える