IIS/公司交易问题

2020-08-17 13:51发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们在SQL Server 20...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们在SQL Server 2014上使用SAP B1 10 PL00。

我们编写Web服务应用程序并将其发布到IIS 10。

我们正在Web服务上使用DI API。

一种用户调用方法没有问题(创建和更新所有文档)

但是,如果有多个用户同时调用方法,则sql崩溃和死锁。

我需要帮助,请

 int lRetCode = oCompany.Connect();
         如果(lRetCode!= 0)
             返回false;
         如果(!oCompany.InTransaction)
             oCompany.StartTransaction();
        
         文档doc =(Documents)oCompany.GetBusinessObject(BoObjectTypes.oPurchaseDeliveryNotes);
         doc.CardCode = cardCode;
        //.......
         lRetCode = doc.Add();
         如果(lRetCode!= 0)
             返回false;
         其他
             {//.......做一些更新}
         如果(oCompany.InTransaction)oCompany.EndTransaction(SAPbobsCOM.BoWfTransOpt.wf_Commit);
 
2条回答
Aaron 3364
2020-08-17 14:16

嗨,

尝试在事务周围使用C#锁定语句。
它将阻止并行请求中使用COM对象,而是暂停第二个请求,直到第一个请求完成。

根据类的实例化方式,lockObject可能需要为静态。

公共类WebService
 {
     私有只读对象lockObject = new object();

     公共无效MyMethod()
     {
         锁(lockObject)
         {
             var lRetCode = oCompany.Connect();
             如果(lRetCode!= 0)
                 返回;

             如果(!oCompany.InTransaction)
                 oCompany.StartTransaction();
        
            //我的代码

             如果(oCompany.InTransaction)
                 oCompany.EndTransaction(SAPbobsCOM.BoWfTransOpt.wf_Commit);
         }
     }
 }

 

https://docs.microsoft。 com/en-us/dotnet/csharp/language-reference/keywords/lock-statement

一周热门 更多>