C# 创建新的地震采集海洋框架

C# 创建新的地震采集海洋框架,c#,transactions,ocean,petrel,C#,Transactions,Ocean,Petrel,我正试图用下面的代码片段创建一个新的空地震采集 Collection已创建并添加到输入窗格,但尝试创建NewSeismicCollection会引发 插件已触发错误: Slb.Ocean.Core.TransactionLockException;事务锁定失败 这不应该是在try块中提交的单个事务中,如: using (ITransaction txn = DataManager.NewTransaction()) { try { txn.Lock(proj);

我正试图用下面的代码片段创建一个新的空地震采集

Collection
已创建并添加到输入窗格,但尝试创建
NewSeismicCollection
会引发

插件已触发错误: Slb.Ocean.Core.TransactionLockException;事务锁定失败


这不应该是在
try
块中提交的单个事务中,如:

using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(proj);
        Collection col2 = proj.CreateCollection("Collection"); 
        txn.Lock(seismicProj);
        SeismicCollection seisColl = seismicProj.CreateSeismicCollection("NewSeismicCollection");
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}
或者找出错误:尝试两个单独的事务:

using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(proj);
        Collection col2 = proj.CreateCollection("Collection"); 
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}

using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(seismicProj);
        SeismicCollection seisColl = seismicProj.CreateSeismicCollection("NewSeismicCollection");
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}

您的第一个事务块缺少提交()这将导致放弃的事务异常,并可能导致您的项目处于不受支持的状态,这反过来可能会导致您的事务锁定异常。

我刚刚意识到,因为项目中没有地震数据,所以没有“seismicProj”所以我首先创建了一个空的地震项目,它成功了。

非常感谢Alex和Marcelo。我尝试了你的两个建议,但仍然得到事务锁定失败..你什么时候(即在上面代码块的哪一行)得到这个异常,它的消息是什么?谢谢Alex。从OceanPetreleException.log文件中,异常位于上述代码片段的第7行(txn.Lock(seismicProj);)。因此事务无法锁定地震项目。是因为没有地震数据的海燕项目没有地震项目吗?异常信息是什么?您的
seismicroj
值是否为
null
?如果没有,您可以尝试将其拆分为两个事务:一个在
proj
集合上,另一个在
seismicroj
集合上(请参见我的编辑)。
using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(proj);
        Collection col2 = proj.CreateCollection("Collection"); 
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}

using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(seismicProj);
        SeismicCollection seisColl = seismicProj.CreateSeismicCollection("NewSeismicCollection");
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}