SOAP Server Support (sponsored💰)

This development is sponsored by our partner CNW. Thank you for helping ORIGAM running!

In the past we have been supporting SOAP interface to interact with Data and Workflow services.

We need to port the implementation to .net 5.

Current SOAP proxy is implemented here:
https://github.com/origam/origam-source/tree/master/OrigamEngineWebAPI

We need to implement the same endpoints with their respective methods:

DataService

This is the WSDL we need to support.

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://asapenginewebapi.advantages.cz/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://asapenginewebapi.advantages.cz/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Service used to communicate with ASAP data sources. Using data service you can load, store or quickly lookup data.</wsdl:documentation>
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://asapenginewebapi.advantages.cz/">
      <s:element name="LoadData">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="dataStructureId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="filterId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="defaultSetId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="sortSetId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="parameters" type="tns:ArrayOfParameter" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfParameter">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="parameter" nillable="true" type="tns:parameter" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="parameter">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="value" />
        </s:sequence>
        <s:attribute name="name" type="s:string" />
      </s:complexType>
      <s:element name="LoadDataResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="LoadDataResult">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LoadData0">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="dataStructureId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="filterId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="sortSetId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="defaultSetId" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LoadData0Response">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="LoadData0Result">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LoadData1">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="dataStructureId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="filterId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="defaultSetId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="sortSetId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramName1" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramValue1" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LoadData1Response">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="LoadData1Result">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LoadData2">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="dataStructureId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="filterId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="defaultSetId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="sortSetId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramName1" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramValue1" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramName2" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramValue2" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="LoadData2Response">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="LoadData2Result">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ExecuteProcedure">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="procedureName" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="parameters" type="tns:ArrayOfParameter" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ExecuteProcedureResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="ExecuteProcedureResult">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="StoreData">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="dataStructureId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="data">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
            <s:element minOccurs="1" maxOccurs="1" name="loadActualValuesAfterUpdate" type="s:boolean" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="StoreDataResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="StoreDataResult">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="StoreXml">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="dataStructureId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="xml">
              <s:complexType mixed="true">
                <s:sequence>
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
            <s:element minOccurs="1" maxOccurs="1" name="loadActualValuesAfterUpdate" type="s:boolean" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="StoreXmlResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="StoreXmlResult">
              <s:complexType>
                <s:sequence>
                  <s:element ref="s:schema" />
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>
  </wsdl:types>
  <wsdl:message name="LoadDataSoapIn">
    <wsdl:part name="parameters" element="tns:LoadData" />
  </wsdl:message>
  <wsdl:message name="LoadDataSoapOut">
    <wsdl:part name="parameters" element="tns:LoadDataResponse" />
  </wsdl:message>
  <wsdl:message name="LoadData0SoapIn">
    <wsdl:part name="parameters" element="tns:LoadData0" />
  </wsdl:message>
  <wsdl:message name="LoadData0SoapOut">
    <wsdl:part name="parameters" element="tns:LoadData0Response" />
  </wsdl:message>
  <wsdl:message name="LoadData1SoapIn">
    <wsdl:part name="parameters" element="tns:LoadData1" />
  </wsdl:message>
  <wsdl:message name="LoadData1SoapOut">
    <wsdl:part name="parameters" element="tns:LoadData1Response" />
  </wsdl:message>
  <wsdl:message name="LoadData2SoapIn">
    <wsdl:part name="parameters" element="tns:LoadData2" />
  </wsdl:message>
  <wsdl:message name="LoadData2SoapOut">
    <wsdl:part name="parameters" element="tns:LoadData2Response" />
  </wsdl:message>
  <wsdl:message name="ExecuteProcedureSoapIn">
    <wsdl:part name="parameters" element="tns:ExecuteProcedure" />
  </wsdl:message>
  <wsdl:message name="ExecuteProcedureSoapOut">
    <wsdl:part name="parameters" element="tns:ExecuteProcedureResponse" />
  </wsdl:message>
  <wsdl:message name="StoreDataSoapIn">
    <wsdl:part name="parameters" element="tns:StoreData" />
  </wsdl:message>
  <wsdl:message name="StoreDataSoapOut">
    <wsdl:part name="parameters" element="tns:StoreDataResponse" />
  </wsdl:message>
  <wsdl:message name="StoreXmlSoapIn">
    <wsdl:part name="parameters" element="tns:StoreXml" />
  </wsdl:message>
  <wsdl:message name="StoreXmlSoapOut">
    <wsdl:part name="parameters" element="tns:StoreXmlResponse" />
  </wsdl:message>
  <wsdl:portType name="DataServiceSoap">
    <wsdl:operation name="LoadData">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Loads data with optionally passing any number of parameters.</wsdl:documentation>
      <wsdl:input message="tns:LoadDataSoapIn" />
      <wsdl:output message="tns:LoadDataSoapOut" />
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Loads data without passing any parameters.</wsdl:documentation>
      <wsdl:input name="LoadData0" message="tns:LoadData0SoapIn" />
      <wsdl:output name="LoadData0" message="tns:LoadData0SoapOut" />
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Loads data by passing 1 parameter.</wsdl:documentation>
      <wsdl:input name="LoadData1" message="tns:LoadData1SoapIn" />
      <wsdl:output name="LoadData1" message="tns:LoadData1SoapOut" />
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Loads data by passing 2 parameters.</wsdl:documentation>
      <wsdl:input name="LoadData2" message="tns:LoadData2SoapIn" />
      <wsdl:output name="LoadData2" message="tns:LoadData2SoapOut" />
    </wsdl:operation>
    <wsdl:operation name="ExecuteProcedure">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Executes procedure on the data store.</wsdl:documentation>
      <wsdl:input message="tns:ExecuteProcedureSoapIn" />
      <wsdl:output message="tns:ExecuteProcedureSoapOut" />
    </wsdl:operation>
    <wsdl:operation name="StoreData">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Stores data to the data store, optionally returning actual values after storing is completed.</wsdl:documentation>
      <wsdl:input message="tns:StoreDataSoapIn" />
      <wsdl:output message="tns:StoreDataSoapOut" />
    </wsdl:operation>
    <wsdl:operation name="StoreXml">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Stores data to the data store, optionally returning actual values after storing is completed.</wsdl:documentation>
      <wsdl:input message="tns:StoreXmlSoapIn" />
      <wsdl:output message="tns:StoreXmlSoapOut" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="DataServiceSoap" type="tns:DataServiceSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="LoadData">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData0" style="document" />
      <wsdl:input name="LoadData0">
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output name="LoadData0">
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData1" style="document" />
      <wsdl:input name="LoadData1">
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output name="LoadData1">
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData2" style="document" />
      <wsdl:input name="LoadData2">
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output name="LoadData2">
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="ExecuteProcedure">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteProcedure" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="StoreData">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/StoreData" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="StoreXml">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/StoreXml" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="DataServiceSoap12" type="tns:DataServiceSoap">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="LoadData">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData0" style="document" />
      <wsdl:input name="LoadData0">
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output name="LoadData0">
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData1" style="document" />
      <wsdl:input name="LoadData1">
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output name="LoadData1">
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="LoadData">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/LoadData2" style="document" />
      <wsdl:input name="LoadData2">
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output name="LoadData2">
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="ExecuteProcedure">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteProcedure" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="StoreData">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/StoreData" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="StoreXml">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/StoreXml" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="DataService">
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Service used to communicate with ASAP data sources. Using data service you can load, store or quickly lookup data.</wsdl:documentation>
    <wsdl:port name="DataServiceSoap" binding="tns:DataServiceSoap">
      <soap:address location="http://127.0.0.1/asapws/DataService.asmx" />
    </wsdl:port>
    <wsdl:port name="DataServiceSoap12" binding="tns:DataServiceSoap12">
      <soap12:address location="http://127.0.0.1/asapws/DataService.asmx" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

WorkflowService

This is the WSDL we need to support.

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://asapenginewebapi.advantages.cz/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://asapenginewebapi.advantages.cz/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Using this service you can execute workflows defined in the loaded model.</wsdl:documentation>
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://asapenginewebapi.advantages.cz/">
      <s:element name="ExecuteWorkflow0">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="workflowId" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ExecuteWorkflow0Response">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="ExecuteWorkflow0Result" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ExecuteWorkflow">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="workflowId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="parameters" type="tns:ArrayOfParameter" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfParameter">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="parameter" nillable="true" type="tns:parameter" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="parameter">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="value" />
        </s:sequence>
        <s:attribute name="name" type="s:string" />
      </s:complexType>
      <s:element name="ExecuteWorkflowResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="ExecuteWorkflowResult" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ExecuteWorkflow1">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="workflowId" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramName" type="s:string" />
            <s:element minOccurs="0" maxOccurs="1" name="paramValue" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="ExecuteWorkflow1Response">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="ExecuteWorkflow1Result" />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>
  </wsdl:types>
  <wsdl:message name="ExecuteWorkflow0SoapIn">
    <wsdl:part name="parameters" element="tns:ExecuteWorkflow0" />
  </wsdl:message>
  <wsdl:message name="ExecuteWorkflow0SoapOut">
    <wsdl:part name="parameters" element="tns:ExecuteWorkflow0Response" />
  </wsdl:message>
  <wsdl:message name="ExecuteWorkflowSoapIn">
    <wsdl:part name="parameters" element="tns:ExecuteWorkflow" />
  </wsdl:message>
  <wsdl:message name="ExecuteWorkflowSoapOut">
    <wsdl:part name="parameters" element="tns:ExecuteWorkflowResponse" />
  </wsdl:message>
  <wsdl:message name="ExecuteWorkflow1SoapIn">
    <wsdl:part name="parameters" element="tns:ExecuteWorkflow1" />
  </wsdl:message>
  <wsdl:message name="ExecuteWorkflow1SoapOut">
    <wsdl:part name="parameters" element="tns:ExecuteWorkflow1Response" />
  </wsdl:message>
  <wsdl:portType name="WorkflowServiceSoap">
    <wsdl:operation name="ExecuteWorkflow">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Executes workflow without passing any parameters.</wsdl:documentation>
      <wsdl:input name="ExecuteWorkflow0" message="tns:ExecuteWorkflow0SoapIn" />
      <wsdl:output name="ExecuteWorkflow0" message="tns:ExecuteWorkflow0SoapOut" />
    </wsdl:operation>
    <wsdl:operation name="ExecuteWorkflow">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Executes workflow passing an array of parameters.</wsdl:documentation>
      <wsdl:input message="tns:ExecuteWorkflowSoapIn" />
      <wsdl:output message="tns:ExecuteWorkflowSoapOut" />
    </wsdl:operation>
    <wsdl:operation name="ExecuteWorkflow">
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Executes workflow passing 1 parameter.</wsdl:documentation>
      <wsdl:input name="ExecuteWorkflow1" message="tns:ExecuteWorkflow1SoapIn" />
      <wsdl:output name="ExecuteWorkflow1" message="tns:ExecuteWorkflow1SoapOut" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="WorkflowServiceSoap" type="tns:WorkflowServiceSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="ExecuteWorkflow">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteWorkflow0" style="document" />
      <wsdl:input name="ExecuteWorkflow0">
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output name="ExecuteWorkflow0">
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="ExecuteWorkflow">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteWorkflow" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="ExecuteWorkflow">
      <soap:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteWorkflow1" style="document" />
      <wsdl:input name="ExecuteWorkflow1">
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output name="ExecuteWorkflow1">
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:binding name="WorkflowServiceSoap12" type="tns:WorkflowServiceSoap">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="ExecuteWorkflow">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteWorkflow0" style="document" />
      <wsdl:input name="ExecuteWorkflow0">
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output name="ExecuteWorkflow0">
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="ExecuteWorkflow">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteWorkflow" style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="ExecuteWorkflow">
      <soap12:operation soapAction="http://asapenginewebapi.advantages.cz/ExecuteWorkflow1" style="document" />
      <wsdl:input name="ExecuteWorkflow1">
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output name="ExecuteWorkflow1">
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="WorkflowService">
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Using this service you can execute workflows defined in the loaded model.</wsdl:documentation>
    <wsdl:port name="WorkflowServiceSoap" binding="tns:WorkflowServiceSoap">
      <soap:address location="http://127.0.0.1/asapws/WorkflowService.asmx" />
    </wsdl:port>
    <wsdl:port name="WorkflowServiceSoap12" binding="tns:WorkflowServiceSoap12">
      <soap12:address location="http://127.0.0.1/asapws/WorkflowService.asmx" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Implementation

We should use SoapCore library for the implementation:

We should support the external WSDL definition so the customer could change e.g. the namespaces to their needs.
E.g. while the attached WSDL examples use http://asapenginewebapi.advantages.cz/LoadData the default should be http://soap.origam.com/LoadData or something similar. For backwards compatibility it should be possible to use the former, though.

The access to the SOAP functionality should be configurable and turned off by default.

The mandatory goal is to be compatible web services on FLASH so it can communicate with current 3rd party systems - I can see on GIT new feature like Soap api can only be accessed with a valid authentication cookie, which will not be probably compatible. If there will be new features, it should be possible to config them via configuration file.

Do you access SOAP services anonymously?

Yes, I think so. It is on intranet from industrial terminal to Origam (Flash).

Ok. @jsusen Please make authentication optional (using configuration). Make sure that unauthenticated access is interpreted as a user “guest”.

I can see there is Soap commit to master. How to configure it so I can test it? I tried to enable Soap in appsettings.json, but the address like https://localhost/DataService.asmx is not working.

The Soap API is configured by this section in the appsettings.json:

  "SoapAPI": {
    "Enabled": "false",
    "RequiresAuthentication": "true"
  },

Here is the test file I used when debugging the Soap API with Visual Studio Code:

# Input file for Visual Studio Code REST client:
# https://marketplace.visualstudio.com/items?itemName=humao.rest-client
#
# - instal the client
# - set @port and @authCookie variables
# - click "Send Request" over the request you want to send 

@port = 44356
# authCookie only matters if the "RequiresAuthentication" in "SoapAPI" config section is set to "true"
@authCookie = CfDJ8LVdnbG3moNEiDWHMuco-LdmRLB4pQZHw4sevTuOIvI_NUr5io7HcD1Se8EIGRqjTUWNlzJOa2wcpDX2ylPW2F4F9vgGXnrqrFqjOVoSGAi0ratxaGMl_9VejptlqG-FPRsL8daRAszz6lzMR5htW8lmJwxf7xBmADWrB1lgyq35L8b9D0zFE35-jXcdKptbaIggg0whvXmzt9LYMGV0T38VgjDhB4aXc8D1lnm5tYKJGVEWfjRTQOmRE58peIVEHpk5AFKRAjGTTHWZGLU_M5b0yuLVRkjFekEeWKKUoCFMfYhC7Jlc8J3Y2ySSBmTLq7aaCTd1wKRzgoHMYxSwglg3Fax6bZ4JcsF_RkcuRRCvQQ7_1KE6e47NUpXPpIqC8QKwfd4Cptf2CIoZoLqcIj5E7oH2dfLxpClAzU7ajq-fLKxV4dj7IsaFyAvXyeI478AKYE8fZgDeDpf_XZPyVu2sBzySp9jG79S3ptI5aAMyw0e_7RUbqnloy4nqJYqAjUDTT1FE2Sek29Be9zXv-67QPLQOlFiBZ3TJOAWpgfWpli6qw0lC7F_j0h4Hsln5opk-CtpioZ3c--6Cf15vgqHprP7gD4Rd01ExTLTWJO8OpZ6ymWt5py3vD-leQ6Ncl9a_0hnB-txOydFE1H9fap8

###
GET  https://localhost:{{port}}/soap/DataService
Cookie: .AspNetCore.Identity.Application={{authCookie}}

###
POST https://localhost:{{port}}/soap/DataService
Content-Type: application/xml
Cookie: .AspNetCore.Identity.Application={{authCookie}}

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://asapenginewebapi.advantages.cz/" >
    <s:Body>
        <a:LoadData>
            <a:dataStructureId>2bbe5b07-9c8c-4fd9-b3ab-c6cf1c1b54e3</a:dataStructureId> 
        </a:LoadData>
    </s:Body>
</s:Envelope>


###
POST https://localhost:{{port}}/soap/DataService
Content-Type: application/xml
Cookie: .AspNetCore.Identity.Application={{authCookie}}

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://asapenginewebapi.advantages.cz/" >
    <s:Body>
        <a:LoadData0>
            <a:dataStructureId>2bbe5b07-9c8c-4fd9-b3ab-c6cf1c1b54e3</a:dataStructureId> 
        </a:LoadData0>
    </s:Body>
</s:Envelope>


###
POST https://localhost:{{port}}/soap/DataService
Content-Type: application/xml
Cookie: .AspNetCore.Identity.Application={{authCookie}}

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://asapenginewebapi.advantages.cz/" >
    <s:Body>
        <a:LoadData1>
            <a:dataStructureId>2bbe5b07-9c8c-4fd9-b3ab-c6cf1c1b54e3</a:dataStructureId> 
        </a:LoadData1>
    </s:Body>
</s:Envelope>


###
POST https://localhost:{{port}}/soap/DataService
Content-Type: application/xml
Cookie: .AspNetCore.Identity.Application={{authCookie}}

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://asapenginewebapi.advantages.cz/" >
    <s:Body>
        <a:LoadData2>
            <a:dataStructureId>2bbe5b07-9c8c-4fd9-b3ab-c6cf1c1b54e3</a:dataStructureId> 
        </a:LoadData2>
    </s:Body>
</s:Envelope>


###
GET  https://localhost:{{port}}/soap/WorkflowService
Cookie: .AspNetCore.Identity.Application={{authCookie}}

###
POST https://localhost:{{port}}/soap/WorkflowService
Content-Type: application/xml
Cookie: .AspNetCore.Identity.Application={{authCookie}}

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://asapenginewebapi.advantages.cz/" >
    <s:Body>
        <a:ExecuteWorkflow0>
            <a:workflowId>33cbb851-b4d5-4ddd-8999-135fde65ef30</a:workflowId> 
        </a:ExecuteWorkflow0>
    </s:Body>
</s:Envelope>

###
POST https://localhost:{{port}}/soap/WorkflowService
Content-Type: application/xml
Cookie: .AspNetCore.Identity.Application={{authCookie}}

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://asapenginewebapi.advantages.cz/" >
    <s:Body>
        <a:ExecuteWorkflow>
            <a:workflowId>33cbb851-b4d5-4ddd-8999-135fde65ef30</a:workflowId> 
        </a:ExecuteWorkflow>
    </s:Body>
</s:Envelope>


###
POST https://localhost:{{port}}/soap/WorkflowService
Content-Type: application/xml
Cookie: .AspNetCore.Identity.Application={{authCookie}}

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://asapenginewebapi.advantages.cz/" >
    <s:Body>
        <a:ExecuteWorkflow1>
            <a:workflowId>33cbb851-b4d5-4ddd-8999-135fde65ef30</a:workflowId> 
        </a:ExecuteWorkflow1>
    </s:Body>
</s:Envelope>

I’ve tested it and it is not probably compatible with soap on on Flash version. The remote device generate Soap request XML like this:

eXtensible Markup Language
    <?xml
        version="1.0"
        encoding="utf-8"
        ?>
    <soap:Envelope
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body>
            <LoadData0
                xmlns="http://asapenginewebapi.advantages.cz/">
                <dataStructureId>
                    d9e75316-aa3d-498b-aa42-e91385e52617
                    </dataStructureId>
                <filterId/>
                <sortSetId/>
                <defaultSetId/>
                </LoadData0>
            </soap:Body>
        </soap:Envelope>

I get the following response on Flash (some customer data are changed -XXX, YYY, AAA) :

eXtensible Markup Language
    <?xml
        version="1.0"
        encoding="utf-8"
        ?>
    <soap:Envelope
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body>
            <LoadData0Response
                xmlns="http://asapenginewebapi.advantages.cz/">
                <LoadData0Result>
                    <xs:schema
                        id="ROOT"
                        xmlns=""
                        xmlns:xs="http://www.w3.org/2001/XMLSchema"
                        xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                        xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
                        <xs:element
                            name="ROOT"
                            msdata:IsDataSet="true"
                            msdata:Locale="cs-CZ"
                            msprop:Id="d9e75316-aa3d-498b-aa42-e91385e52617">
                            <xs:complexType>
                                <xs:choice
                                    minOccurs="0"
                                    maxOccurs="unbounded">
                                    <xs:element
                                        name="XXX_SCHENK_PAS_XXX"
                                        msdata:IsLoading="False"
                                        msdata:DisplayExpression="'Laborator - XXX'"
                                        msprop:IsAuditingEnabled="False"
                                        msprop:EntityId="53f431fc-51a6-4830-b41d-fe124863c48c"
                                        msprop:Id="9897a2eb-4076-4f5d-937e-93bebb400535">
                                        <xs:complexType>
                                            <xs:attribute
                                                name="YYY"
                                                msprop:FieldId="4f812c5f-4553-4e5f-9f4d-95d2e60a224a"
                                                msprop:IsAuditingEnabled="True"
                                                msprop:AsapDataType="Long"
                                                msprop:OnCopyAction="Copy"
                                                msprop:Id="2c25da3a-e49a-42cc-bdd5-f6b616fb4bdd"
                                                type="xs:long"/>
                                            <xs:attribute
                                                name="ID_vz"
                                                msdata:Caption="AAA"
                                                msprop:FieldId="e51364b3-ef96-456e-b46b-9bb1ab333413"
                                                msprop:IsAuditingEnabled="True"
                                                msprop:AsapDataType="Integer"
                                                msprop:OnCopyAction="Copy"
                                                msprop:Id="4c234d0f-679c-487e-a1da-f178c1cc9009"
                                                type="xs:int"/>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:choice>
                                </xs:complexType>
                            </xs:element>
                        </xs:schema>
                    <diffgr:diffgram
                        xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                        xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
                        <ROOT
                            xmlns="">
                            <XXX_SCHENK_PAS_XXX
                                diffgr:id="XXX_SCHENK_PAS_XXX1"
                                msdata:rowOrder="0"
                                ID_vz="0"/>
                            </ROOT>
                        </diffgr:diffgram>
                    </LoadData0Result>
                </LoadData0Response>
            </soap:Body>
        </soap:Envelope>

but from HTML5 Soap version I get the following response:

eXtensible Markup Language
    <s:Envelope
        xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <s:Body>
            <LoadData0Response
                xmlns="http://asapenginewebapi.advantages.cz/">
                <diffgr:diffgram
                    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                    xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
                    <ROOT
                        xmlns="">
                        <XXX_SCHENK_PAS_XXX
                            diffgr:id="XXX_SCHENK_PAS_XXX"
                            msdata:rowOrder="0"
                            ID_vz="0"/>
                        </ROOT>
                    </diffgr:diffgram>
                </LoadData0Response>
            </s:Body>
[Malformed Packet: XML]
    [Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]
        [Malformed Packet (Exception occurred)]
        [Severity level: Error]
        [Group: Malformed]

@jsusen Is it possible to update Soap, so it generates the XML datastructure as in Flash version and the soap connected devices can communicate as usually?

@koki Is there any record of the error “Malformed Packet: XML” in your log file?

@jsusen actually the pasted XML parts are from Wireshark capture. There is nothing more under Malformed packet part. Is there a way to log soap via log4net?

Erros from the whole application should be visible in the log if you set you root log level to error in the log4net.config

<root>
	<level value="ERROR"/>
	<appender-ref ref="FileAppender" />
</root>

The log4net is set as you wrote, but the log is empty.

I added soap schema and result element which was missing in the response. I’m not sure what the malformed packet error is about, we will see if the problem presists.

I’ll test it. Could you somehow push this change to master build?

The build #2206 is running now.

I’ve just tested new version. It works better. The data are loaded, but malformed packet error persist - there is missing header <?xml version..... When I tried to Store data I didn’t get any response from Soap service. @jsusen can we make a skype call regarding this?

This is the Soap request to store data. No response is returned, data are not stored in database and there is nothing in the log file

    <?xml
        version="1.0"
        encoding="utf-8"
        ?>
    <soap:Envelope
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body>
            <StoreData
                xmlns="http://asapenginewebapi.advantages.cz/">
                <dataStructureId>
                    d59a6254-8670-43d8-9f99-50ece834f175
                    </dataStructureId>
                <data>
                    <xs:schema
                        id="ROOT"
                        xmlns=""
                        xmlns:xs="http://www.w3.org/2001/XMLSchema"
                        xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                        xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
                        <xs:element
                            name="ROOT"
                            msdata:IsDataSet="true"
                            msdata:Locale="cs-CZ"
                            msprop:Id="d59a6254-8670-43d8-9f99-50ece834f175">
                            <xs:complexType>
                                <xs:choice
                                    minOccurs="0"
                                    maxOccurs="unbounded">
                                    <xs:element
                                        name="XXX_DeliveryBrush"
                                        msdata:DisplayExpression="'ZZZ - laborka'"
                                        msprop:EntityId="15a10ae5-040e-450e-a9d4-2a4927971e8f"
                                        msprop:IsAuditingEnabled="False"
                                        msprop:Id="566d58e6-3b0f-43b9-b666-37cf75f36165">
                                        <xs:complexType>
                                            <xs:attribute
                                                name="Id"
                                                msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AllowNulls="False"
                                                msprop:AsapDataType="UniqueIdentifier"
                                                msprop:FieldId="06300870-d250-4c88-84f4-fb7a5b270712"
                                                msprop:Id="c54413b6-eb88-49c8-a7ff-3bb942c1984e"
                                                msprop:IsAuditingEnabled="False"
                                                type="xs:string"
                                                use="required"/>
                                            <xs:attribute
                                                name="RecordUpdatedBy"
                                                msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                                                msdata:Caption="Updated By"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AsapDataType="UniqueIdentifier"
                                                msprop:FieldId="4aa5a74d-b8bf-410d-b4f2-fd9230f166f8"
                                                msprop:Id="ad2d2efe-9cb0-4141-ac28-25b8ed68580b"
                                                msprop:IsAuditingEnabled="False"
                                                msprop:DefaultLookupId="08d82ef5-df38-48d6-a276-ee5b7f027bd6"
                                                type="xs:string"/>
                                            <xs:attribute
                                                name="RecordCreated"
                                                msdata:Caption="Time Created"
                                                msprop:AsapDataType="Date"
                                                msprop:OnCopyAction="Copy"
                                                msprop:IsAuditingEnabled="False"
                                                msprop:FieldId="17e3c48a-0b0e-49e3-9a05-6b77233388d3"
                                                msprop:Id="6a92781b-ac57-4b24-a2a3-7ff772747431"
                                                type="xs:dateTime"/>
                                            <xs:attribute
                                                name="Selected"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AllowNulls="False"
                                                msprop:AsapDataType="Boolean"
                                                msprop:FieldId="5dc27b7b-2a65-43c2-bc54-d71823d19a24"
                                                msprop:Id="de0d5266-6200-4775-87aa-e151815fb23c"
                                                msprop:IsAuditingEnabled="False"
                                                type="xs:boolean"
                                                msdata:DefaultValue="false"
                                                use="required"/>
                                            <xs:attribute
                                                name="RecordUpdated"
                                                msdata:Caption="Time Updated"
                                                msprop:AsapDataType="Date"
                                                msprop:OnCopyAction="Copy"
                                                msprop:IsAuditingEnabled="False"
                                                msprop:FieldId="477082d3-3ff1-4905-8317-6deb16c5a676"
                                                msprop:Id="d245e9df-9a2f-4196-89de-b86faaaeb624"
                                                type="xs:dateTime"/>
                                            <xs:attribute
                                                name="RecordCreatedBy"
                                                msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                                                msdata:Caption="Created By"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AsapDataType="UniqueIdentifier"
                                                msprop:FieldId="e974ccc9-25f4-45a7-aa4e-49f136e3356d"
                                                msprop:Id="cbcf7bb8-10d0-4576-98f5-1210b10bae5f"
                                                msprop:IsAuditingEnabled="False"
                                                msprop:DefaultLookupId="08d82ef5-df38-48d6-a276-ee5b7f027bd6"
                                                type="xs:string"/>
                                            <xs:attribute
                                                name="TestNumber"
                                                msdata:Caption="Číslo vzorku"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AllowNulls="False"
                                                msprop:AsapDataType="Long"
                                                msprop:FieldId="4b0d0ba3-3425-4132-b1ee-6318971951d7"
                                                msprop:Id="e46732f5-54a0-4da4-b7df-833daa96fae6"
                                                msprop:IsAuditingEnabled="True"
                                                type="xs:long"
                                                use="required"/>
                                            <xs:attribute
                                                name="ReferenceCode"
                                                msdata:Caption="LOP"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AllowNulls="False"
                                                msprop:AsapDataType="Long"
                                                msprop:FieldId="b5aeb41d-939e-46ce-9bdc-abaf177a550f"
                                                msprop:Id="8de3d3c5-62ca-4d35-9880-5117c07d8740"
                                                msprop:IsAuditingEnabled="True"
                                                type="xs:long"
                                                use="required"/>
                                            <xs:attribute
                                                name="BrushCount"
                                                msdata:Caption="Počet štětek"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AllowNulls="False"
                                                msprop:AsapDataType="Integer"
                                                msprop:FieldId="4a468ad1-934b-4822-beee-ec1bbb1bd5b1"
                                                msprop:Id="569be091-1d6f-464f-bee6-c450cdf24c10"
                                                msprop:IsAuditingEnabled="True"
                                                type="xs:int"
                                                use="required"/>
                                            <xs:attribute
                                                name="refXXX_SeasonId"
                                                msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                                                msdata:Caption="Kampaň"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AllowNulls="False"
                                                msprop:AsapDataType="UniqueIdentifier"
                                                msprop:FieldId="168385ef-227f-4757-83d1-01e246b41749"
                                                msprop:Id="b2346553-703f-4427-b4d7-229a44bc8f7d"
                                                msprop:IsAuditingEnabled="True"
                                                msprop:DefaultLookupId="f03c7b19-5513-4db6-aa70-b27642b8d58b"
                                                type="xs:string"
                                                msdata:DefaultValue="1b16eafc-f14f-4ae2-86a1-f6ee34ff54f6"
                                                use="required"/>
                                            <xs:attribute
                                                name="refXXX_FactoryId"
                                                msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                                                msdata:Caption="Cukrovar"
                                                msprop:OnCopyAction="Copy"
                                                msprop:AllowNulls="False"
                                                msprop:AsapDataType="UniqueIdentifier"
                                                msprop:FieldId="3a634e65-4190-4f23-ab68-e400b794c5ff"
                                                msprop:Id="8143da0d-191a-44cb-bde3-e624f1c94d00"
                                                msprop:IsAuditingEnabled="True"
                                                msprop:DefaultLookupId="93d15a8b-29c3-4d4f-9d5d-2d1dd7e06f3b"
                                                type="xs:string"
                                                use="required"/>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:choice>
                                </xs:complexType>
                            <xs:unique
                                name="Constraint1"
                                msdata:PrimaryKey="true">
                                <xs:selector
                                    xpath=".//XXX_DeliveryBrush"/>
                                <xs:field
                                    xpath="@Id"/>
                                </xs:unique>
                            </xs:element>
                        </xs:schema>
                    <diffgr:diffgram
                        xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                        xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
                        <ROOT
                            xmlns="">
                            <XXX_DeliveryBrush
                                diffgr:id="XXX_DeliveryBrush1"
                                msdata:rowOrder="0"
                                diffgr:hasChanges="inserted"
                                Id="34bb7eab-debd-413a-aa4d-3cbcf3c48ae2"
                                RecordCreated="2021-09-02T15:42:47.8411343+02:00"
                                Selected="false"
                                TestNumber="55"
                                ReferenceCode="50"
                                BrushCount="128"
                                refXXX_SeasonId="3ea21746-9a02-4b5c-a419-fcfb0fe76237"
                                refXXX_FactoryId="31186535-357a-432c-ad84-9def7222283b"/>
                            </ROOT>
                        </diffgr:diffgram>
                    </data>
                <loadActualValuesAfterUpdate>
                    false
                    </loadActualValuesAfterUpdate>
                </StoreData>
            </soap:Body>
        </soap:Envelope>

@jsusen please note that in .net 5 the .net data type references msdata:DataType have changed in the xsd (e. g. Guid). Not sure if this is the problem. I would propose to mass replace the references before loading the dataset. Also AsapDataType => OrigamDataType.