I posted this on the SAP forums, but this looks like the place to be.
We're in the process of refactoring a large PowerBuilder application with the goal of keeping our business logic in PB and exposing it as an API for .NET developers by using the .NET assembly target. We are currently working in PowerBuilder 12.6 Classic, but have played around with the trial for PowerBuilder 2017.
The environments we need to support include multi-threaded environments like IIS and xUnit. In using xUnit (which defaults to running tests in parallel), we've encountered an issue where database connections made on separate threads are interfering with each other. We've also reproduced this issue from a multi-threaded .NET console application, so we're expecting it to be an issue under IIS as well.
We've created a very simple .NET assembly that just exposes a connection nvo that wraps a native PB transaction stored as an instance variable in the class. We are not using SQLCA or any global variables. The connection object just has connect and disconnect methods. We import this assembly into a .NET xUnit project, create three separate test classes where each runs a test that instantiates a local connection instance and loops ten times, just connecting and disconnecting with each iteration.
If we force xUnit to run tests serially, we can repeatedly run all tests without issue. If we let xUnit parallelize the execution of the three test classes, we get random errors. Sometimes after connecting we'll get a "transaction not connected" exception when immediately trying to disconnect or when attempting to connect we'll get a "transaction already connected" exception. Sometimes everything works fine.
We've tried this with different database interfaces - SNC, ODBC, ADO.Net - and they all exhibit the same behavior. We've tried this in PB 12.5 Classic, PB 12.6 Classic, and PB 2017. All show the same problem.
I guess our first question is: this should be possible correct? I'd imagine others have successfully used PB Classic's .NET assemblies from within an environment like IIS?
Assuming this should be possible, I have a sample that demonstrates the issue (didn't see an option to upload here) or I can provide the main source files to demonstrate the issue.
Thanks for any insight or help you can give.