Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / Remoting / RedirectionProxy.cs / 1305376 / RedirectionProxy.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // File: RedirectionProxy.cs using System; using System.Runtime.InteropServices; using System.Runtime.Remoting.Messaging; using System.Runtime.Remoting.Proxies; namespace System.Runtime.Remoting { internal class RedirectionProxy : MarshalByRefObject, IMessageSink { private MarshalByRefObject _proxy; [System.Security.SecurityCritical /*auto-generated*/] private RealProxy _realProxy; private Type _serverType; private WellKnownObjectMode _objectMode; [System.Security.SecurityCritical] // auto-generated internal RedirectionProxy(MarshalByRefObject proxy, Type serverType) { _proxy = proxy; _realProxy = RemotingServices.GetRealProxy(_proxy); _serverType = serverType; _objectMode = WellKnownObjectMode.Singleton; } // RedirectionProxy public WellKnownObjectMode ObjectMode { set { _objectMode = value; } } // ObjectMode [System.Security.SecurityCritical] // auto-generated public virtual IMessage SyncProcessMessage(IMessage msg) { IMessage replyMsg = null; try { msg.Properties["__Uri"] = _realProxy.IdentityObject.URI; if (_objectMode == WellKnownObjectMode.Singleton) { replyMsg = _realProxy.Invoke(msg); } else { // This is a single call object, so we need to create // a new instance. MarshalByRefObject obj = (MarshalByRefObject)Activator.CreateInstance(_serverType, true); BCLDebug.Assert(RemotingServices.IsTransparentProxy(obj), "expecting a proxy"); RealProxy rp = RemotingServices.GetRealProxy(obj); replyMsg = rp.Invoke(msg); } } catch (Exception e) { replyMsg = new ReturnMessage(e, msg as IMethodCallMessage); } return replyMsg; } // SyncProcessMessage [System.Security.SecurityCritical] // auto-generated public virtual IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { // < IMessage replyMsg = null; replyMsg = SyncProcessMessage(msg); if (replySink != null) replySink.SyncProcessMessage(replyMsg); return null; } // AsyncProcessMessage public IMessageSink NextSink { [System.Security.SecurityCritical] // auto-generated get { return null; } } } // class RedirectionProxy // This is only to be used for wellknown Singleton COM objects. internal class ComRedirectionProxy : MarshalByRefObject, IMessageSink { private MarshalByRefObject _comObject; private Type _serverType; internal ComRedirectionProxy(MarshalByRefObject comObject, Type serverType) { BCLDebug.Assert(serverType.IsCOMObject, "This must be a COM object type."); _comObject = comObject; _serverType = serverType; } // ComRedirectionProxy [System.Security.SecurityCritical] // auto-generated public virtual IMessage SyncProcessMessage(IMessage msg) { IMethodCallMessage mcmReqMsg = (IMethodCallMessage)msg; IMethodReturnMessage replyMsg = null; replyMsg = RemotingServices.ExecuteMessage(_comObject, mcmReqMsg); if (replyMsg != null) { // If an "RPC server not available" (HRESULT=0x800706BA) COM // exception is thrown, we will try to recreate the object once. const int RPC_S_SERVER_UNAVAILABLE = unchecked((int)0x800706BA); const int RPC_S_CALL_FAILED_DNE = unchecked((int)0x800706BF); COMException comException = replyMsg.Exception as COMException; if ((comException != null) && ((comException._HResult == RPC_S_SERVER_UNAVAILABLE) || (comException._HResult == RPC_S_CALL_FAILED_DNE))) { _comObject = (MarshalByRefObject)Activator.CreateInstance(_serverType, true); replyMsg = RemotingServices.ExecuteMessage(_comObject, mcmReqMsg); } } return replyMsg; } // SyncProcessMessage [System.Security.SecurityCritical] // auto-generated public virtual IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { // < IMessage replyMsg = null; replyMsg = SyncProcessMessage(msg); if (replySink != null) replySink.SyncProcessMessage(replyMsg); return null; } // AsyncProcessMessage public IMessageSink NextSink { [System.Security.SecurityCritical] // auto-generated get { return null; } } } // class ComRedirectionProxy } // namespace System.Runtime.Remoting // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- xamlnodes.cs
- VirtualDirectoryMapping.cs
- TextEffectResolver.cs
- Journaling.cs
- TraceListeners.cs
- _ChunkParse.cs
- StrokeSerializer.cs
- WebPartExportVerb.cs
- DataViewSettingCollection.cs
- XmlRootAttribute.cs
- ConfigViewGenerator.cs
- WebPart.cs
- TypeSystemProvider.cs
- StyleSheetComponentEditor.cs
- ErrorCodes.cs
- FileVersionInfo.cs
- SecondaryIndex.cs
- assemblycache.cs
- Int16Animation.cs
- StyleCollection.cs
- ContractReference.cs
- FixedSOMFixedBlock.cs
- PixelFormats.cs
- WindowsFormsSectionHandler.cs
- PreservationFileWriter.cs
- TraceLog.cs
- ListViewPagedDataSource.cs
- LazyTextWriterCreator.cs
- ServiceMemoryGates.cs
- RegexParser.cs
- MsmqHostedTransportManager.cs
- Formatter.cs
- SecurityTokenInclusionMode.cs
- TimeStampChecker.cs
- mongolianshape.cs
- RegionInfo.cs
- PropertyRecord.cs
- ConfigurationValidatorAttribute.cs
- TemplateParser.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- PopupRootAutomationPeer.cs
- ListItemViewAttribute.cs
- SiteMap.cs
- Privilege.cs
- ValidationRule.cs
- SafeSecurityHandles.cs
- HandledEventArgs.cs
- GeneralTransformCollection.cs
- ManagedIStream.cs
- DesignerLoader.cs
- BindingBase.cs
- SqlDependencyUtils.cs
- MouseCaptureWithinProperty.cs
- SolidColorBrush.cs
- DeclarativeConditionsCollection.cs
- SecurityKeyUsage.cs
- ShaperBuffers.cs
- SqlRewriteScalarSubqueries.cs
- Color.cs
- InternalSendMessage.cs
- ProfileInfo.cs
- ToolTipAutomationPeer.cs
- HatchBrush.cs
- XNodeSchemaApplier.cs
- EnlistmentState.cs
- EncryptedType.cs
- WMIInterop.cs
- SystemThemeKey.cs
- ValidationResults.cs
- NameNode.cs
- Span.cs
- PlainXmlWriter.cs
- CodeTypeReference.cs
- AssemblyHash.cs
- AspNetHostingPermission.cs
- AssociationEndMember.cs
- _BaseOverlappedAsyncResult.cs
- MasterPageBuildProvider.cs
- HandlerBase.cs
- SQLDateTimeStorage.cs
- NetworkCredential.cs
- StatusBarPanelClickEvent.cs
- WebPartsSection.cs
- LocalizationParserHooks.cs
- UrlPath.cs
- SchemaSetCompiler.cs
- EnvironmentPermission.cs
- SecurityPermission.cs
- GenericTransactionFlowAttribute.cs
- EffectiveValueEntry.cs
- DataServiceOperationContext.cs
- DataViewSetting.cs
- InertiaExpansionBehavior.cs
- BlobPersonalizationState.cs
- StructuredTypeEmitter.cs
- FixedSOMLineCollection.cs
- XmlNode.cs
- CompositeActivityValidator.cs
- TraceHandlerErrorFormatter.cs
- XmlDocument.cs