Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Runtime / Remoting / RedirectionProxy.cs / 1 / 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; private RealProxy _realProxy; private Type _serverType; private WellKnownObjectMode _objectMode; 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 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 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 { 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 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 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 { get { return null; } } } // class ComRedirectionProxy } // namespace System.Runtime.Remoting // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LessThan.cs
- PropertyItemInternal.cs
- InternalConfigSettingsFactory.cs
- WCFServiceClientProxyGenerator.cs
- BamlLocalizableResourceKey.cs
- ArgumentsParser.cs
- Drawing.cs
- TableStyle.cs
- log.cs
- LayoutEditorPart.cs
- Table.cs
- MsdtcClusterUtils.cs
- controlskin.cs
- Classification.cs
- TextEditorTyping.cs
- Int32EqualityComparer.cs
- UserControlDesigner.cs
- NegatedCellConstant.cs
- TextureBrush.cs
- ReaderWriterLockSlim.cs
- ToolStripControlHost.cs
- AutomationPropertyInfo.cs
- SafeFileHandle.cs
- RtfToken.cs
- LinqDataSource.cs
- SqlCacheDependencyDatabase.cs
- StringValidatorAttribute.cs
- ToolStripSplitButton.cs
- JournalEntryListConverter.cs
- RichTextBox.cs
- WebAdminConfigurationHelper.cs
- BaseCodePageEncoding.cs
- RegistryConfigurationProvider.cs
- DataGridViewCellMouseEventArgs.cs
- BitConverter.cs
- connectionpool.cs
- RecognizerStateChangedEventArgs.cs
- PerformanceCounterPermissionEntry.cs
- TypeSystem.cs
- BrowserDefinitionCollection.cs
- ListenerElementsCollection.cs
- PeerName.cs
- BaseAppDomainProtocolHandler.cs
- ProviderSettings.cs
- ScriptRegistrationManager.cs
- Dictionary.cs
- DataGridViewColumnStateChangedEventArgs.cs
- EntitySetRetriever.cs
- COAUTHIDENTITY.cs
- SamlSubject.cs
- UITypeEditor.cs
- OLEDB_Util.cs
- LinkButton.cs
- PointHitTestResult.cs
- IconBitmapDecoder.cs
- Misc.cs
- latinshape.cs
- Int32KeyFrameCollection.cs
- WebPartUserCapability.cs
- FunctionParameter.cs
- SmiEventSink_Default.cs
- RuntimeResourceSet.cs
- WebControlParameterProxy.cs
- PageContentAsyncResult.cs
- BamlReader.cs
- DocumentOrderQuery.cs
- HwndHost.cs
- WebControlAdapter.cs
- LoginCancelEventArgs.cs
- ComponentRenameEvent.cs
- UshortList2.cs
- Control.cs
- CommandBinding.cs
- SqlNamer.cs
- SourceFileBuildProvider.cs
- TdsParserSessionPool.cs
- AuthStoreRoleProvider.cs
- DoubleAnimationUsingPath.cs
- ScrollProperties.cs
- SpellerHighlightLayer.cs
- ContextBase.cs
- ListBoxChrome.cs
- ModulesEntry.cs
- BoundPropertyEntry.cs
- SID.cs
- InternalCache.cs
- Vector.cs
- Rectangle.cs
- ZipIOModeEnforcingStream.cs
- X509SecurityTokenAuthenticator.cs
- DataRelation.cs
- ColumnMapCopier.cs
- SystemSounds.cs
- InvalidDataContractException.cs
- ViewBox.cs
- AnimatedTypeHelpers.cs
- XmlSchemaChoice.cs
- ContentDisposition.cs
- RestClientProxyHandler.cs
- FontSource.cs