0

複数のクライアントが1つのサーバーに接続するVB.netでマルチスレッドクライアントサーバーアプリケーションを開発しています.XMLファイルを開いてデータを書き込むサーバー側のプロセスもあります。しかし、1時間後に次のエラーが発生しました:

「ファイルは別のプロセスで使用されています。」

上記の問題について、あなたの側から何か提案はありますか。XML を読み取るには、以下のコードを確認してください

Public Function ISRecordExitsinXML(ByVal pFilepath As String, ByVal pClientIP As String, ByVal pMacAddress As String)
    Dim xmlDoc As XmlDocument = Nothing
    Dim xmlPupilNode As XmlNode = Nothing
    Dim xmlAgeNode As XmlNode = Nothing
    Try

        Dim FileName As String = pFilepath
        ISRecordExitsinXML = Nothing

        xmlDoc = New XmlDocument
        xmlDoc.Load(FileName)
        xmlPupilNode = xmlDoc.SelectSingleNode("//RFIDReader[HostIPAddress = '" & pClientIP.Trim & "' and MacAddress = '" & pMacAddress & "' and Status=1]  ")

        If Not xmlPupilNode Is Nothing Then
            xmlAgeNode = xmlPupilNode.SelectSingleNode("RegDateTime")
            If Not xmlAgeNode Is Nothing Then
                xmlAgeNode.InnerText = DateTime.Now.ToString()
                xmlDoc.Save(FileName)
                ISRecordExitsinXML = True
            End If
        Else
            ISRecordExitsinXML = False
        End If
        xmlDoc = Nothing
        xmlPupilNode = Nothing
        xmlAgeNode = Nothing
    Catch ex As Exception
        xmlDoc = Nothing
        xmlPupilNode = Nothing
        xmlAgeNode = Nothing
        ISRecordExitsinXML = False
        ErrorLog.WriteToErrorLog(ex.Message.ToString(), "HSRV-A9", "ErrorLog.Log")
    Finally
        xmlDoc = Nothing
        xmlPupilNode = Nothing
        xmlAgeNode = Nothing
    End Try
    Return ISRecordExitsinXML
End Function

前もって感謝します

4

2 に答える 2

1

あなたの問題 (ご存じだと思います!) は、ファイルが 1 つのプロセスによって開かれている場合、別のプロセスによって開くことができないことです。データベースなど、データを受け取る代替媒体を使用する可能性はありますか? 次に、データをデータベースから XML ファイルに 1 回のヒットでエクスポートして、競合を完全に回避できます。

于 2013-09-04T12:00:11.533 に答える
0

書き込みプロセスが終了した後にファイルを閉じていない可能性があるため、他のスレッドからアクセスできなくなります

于 2013-09-04T12:00:29.903 に答える