Projektdateien hinzufügen.

This commit is contained in:
mr_sc
2026-09-01 20:52:07 +02:00
parent addb252234
commit 0961934ba8
477 changed files with 114887 additions and 0 deletions

88
README.md Normal file
View File

@@ -0,0 +1,88 @@
# IMSApiDotNet 10.0.0-59 C# / HttpClient port
This project reconstructs the .NET IMSAPI client from the supplied Java reference bundle
`imsapi-client-javalib-java-bundle-10.0.0-59.jar` and the supplied legacy .NET client 10.0.0-3.
## What is included
- **446 generated public container/result classes** from the Java bundle.
- **356 IMSApiService methods** with the exact Java 10.0.0-59 wire method names.
- IHAP `BINARY_HASH` (protocol version 1) and `BINARY_FIELD` (version 17) serialization.
- Java class hashes and field order copied from the running Java reference implementation.
- `HttpClient` transport; no `HttpWebRequest` / `WebRequest` in the new transport.
- Locator support for `itac.artes.clusternodes`, `/artes/lookup`, `/imsapi/service?type=machine`, plus a direct service URL override.
- Request header behavior: `Content-Type`/`Accept` `application/octet-stream`, `reqnr`, optional Authorization and gzip request bodies.
- Legacy namespace `com.itac.mes.imsapi.client.dotnet` with the old synchronous return-code/ref-parameter API for the methods present in the legacy DLL.
- Message subscription compatibility implemented as a background `msgCallback` loop.
- Golden protocol vectors produced by the supplied Java JAR.
- The original JAR/DLL and extraction metadata under `reference/` for traceability.
## Build
Requires a current .NET SDK (8 or newer is recommended):
```powershell
./scripts/build.ps1
./scripts/test.ps1
```
The library itself targets `netstandard2.0` for broad compatibility. Its **assembly version stays at `10.0.0.3`** to improve drop-in compatibility with applications compiled against the supplied legacy DLL; file/package version is `10.0.0.59`. The golden-vector test project targets `net8.0`.
Output:
`src/IMSApiDotNet/bin/Release/netstandard2.0/IMSApiDotNet.dll`
## Legacy-style usage
```csharp
using com.itac.mes.imsapi.client.dotnet;
using com.itac.mes.imsapi.domain.container;
var api = IMSApiDotNet.loadLibrary();
api.setProperty("itac.artes.clusternodes", "http://mes-node-1:8080,http://mes-node-2:8080");
api.setProperty("itac.appid", "MyApplication");
int rc = api.imsapiInit();
var validation = new IMSApiSessionValidationStruct();
// populate validation fields ...
IMSApiSessionContextStruct context = null;
rc = api.regLogin(validation, ref context);
```
For a known endpoint you may bypass locator discovery:
```csharp
api.setProperty("itac.artes.ihap.serviceurl", "http://mes-host:8080/imsapi/service");
```
## Modern API
```csharp
var options = new com.itac.mes.imsapi.transport.IhapClientOptions();
options.ClusterNodes.Add("http://mes-node-1:8080");
using var client = new com.itac.mes.imsapi.transport.IhapClient(options);
var service = new com.itac.mes.imsapi.domain.IMSApiServiceStub(client);
var result = service.imsapiGetErrorText(context, -900);
```
## Verification status
The protocol layout was reverse-checked against **golden byte vectors generated by the supplied Java 10.0.0-59 JAR**. The test project contains vectors for both BINARY_HASH and BINARY_FIELD.
This ChatGPT execution environment does **not** contain a .NET SDK/compiler, and external package installation is blocked. Therefore the final `dotnet build` could not be executed here. The source tree was generated without NuGet dependencies so it can be built directly on a normal Visual Studio/.NET SDK machine.
## Compatibility notes
The Java 10.0.0-59 service contains six additional business methods not present in the old 10.0.0-3 .NET interface, plus `msgCallback` (which the old .NET wrapper hid behind `msgSubscribe`):
- `batchCompleteBatch`
- `batchSplitBatchNumber`
- `equCheckEquipments`
- `mlGetMaterialChainData`
- `mlSpliceMaterialChain`
- `mlSplitMaterialChain`
- `msgCallback` (transport callback used by the compatibility subscription loop)
They are available through `IMSApiServiceStub`. Existing methods retain the old synchronous wrapper shape where it could be derived from the supplied .NET binary.
The cluster locator in this port performs the Java-style `/artes/lookup` request and tests `/imsapi/service?type=machine`. In complex installations where lookup returns a node-id that maps to a URL not present in `itac.artes.clusternodes`, configure all reachable cluster-node base URLs or set `itac.artes.ihap.serviceurl` directly.