/// <summary> /// Creates or retrieve cached ArgumentsSerializer for the given (marshal by ref, e.g. interface) Type. /// </summary> internal ArgumentsSerializer Create(Type forType) { lock(this) { ArgumentsSerializer result = (ArgumentsSerializer)m_serializers[forType]; if (result == null) { result = new ArgumentsSerializer(forType, m_serFactory); m_serializers[forType] = result; } return result; } }
/// <summary> /// Creates or retrieve cached ArgumentsSerializer for the given (marshal by ref, e.g. interface) Type. /// </summary> internal ArgumentsSerializer Create(Type forType) { lock (this) { ArgumentsSerializer result = (ArgumentsSerializer)m_serializers[forType]; if (result == null) { result = new ArgumentsSerializer(forType, m_serFactory); m_serializers[forType] = result; } return(result); } }
/// <summary>deserialise the request body</summary> /// <param name="contextElements">the deserialised context elements, if any or null</param> private void DeserialiseRequestBody(CdrInputStream cdrStream, GiopVersion version, GiopServerRequest request, ArgumentsSerializer ser, out IDictionary contextElements) { // clarification from CORBA 2.6, chapter 15.4.1: no padding, when no arguments/no context elements // are serialised, i.e. body empty // ignores, if not enough bytes because no args/context; because in this case, no more bytes follow TryAlignBodyIfNeeded(cdrStream, version); // unmarshall parameters object[] args = ser.DeserializeRequestArgs(request.RequestMethodName, cdrStream, out contextElements); // for standard corba ops, adapt args: if (request.IsStandardCorbaOperation) { args = AdaptArgsForStandardOp(args, request.RequestUri); } request.RequestArgs = args; }
/// <summary>serializes the request body</summary> /// <param name="targetStream"></param> /// <param name="clientRequest">the request to serialise</param> /// <param name="version">the GIOP-version</param> private void SerialiseRequestBody(CdrOutputStream targetStream, GiopClientRequest clientRequest, GiopVersion version, ArgumentsSerializer ser) { // body of request msg: serialize arguments // clarification from CORBA 2.6, chapter 15.4.1: no padding, when no arguments are serialised --> // for backward compatibility, do it nevertheless AlignBodyIfNeeded(targetStream, version); ser.SerializeRequestArgs(clientRequest.RequestMethodName, clientRequest.RequestArguments, targetStream, clientRequest.RequestCallContext); }