/// <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);
 }