RemotingHelper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / AddIn / AddIn / System / Addin / Hosting / RemotingHelper.cs / 1305376 / RemotingHelper.cs

                            using System; 
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc; 

namespace System.AddIn.Hosting 
{ 

    internal static class RemotingHelper 
    {
        // runtime initializes this to false;
        static bool CreatedInAD;
        static readonly Object s_lock = new Object(); 
        internal static readonly String s_emptyGuid = Guid.Empty.ToString();
 
 
        // 
        //  
        // 
        // 
        // 
        //  
        // 
        [System.Security.SecuritySafeCritical] 
        [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Assert, 
                Flags = System.Security.Permissions.SecurityPermissionFlag.RemotingConfiguration | System.Security.Permissions.SecurityPermissionFlag.Infrastructure)]
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security","CA2116:AptcaMethodsShouldOnlyCallAptcaMethods")] 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2129:SecurityTransparentCodeShouldNotReferenceNonpublicSecurityCriticalCode", Justification = "This is a SecurityRules.Level1 assembly, in which this rule is being incorrectly applied")]
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2128:SecurityTransparentCodeShouldNotAssert", Justification = "This is a SecurityRules.Level1 assembly, in which this rule is being incorrectly applied")]
        internal static void InitializeClientChannel()
        { 
            lock(s_lock)
            { 
                if (CreatedInAD)                    // only one client channel per AD 
                    return;
                CreatedInAD = true;                 // make sure this hasn't been created already in this AD 

                //
                BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
                serverProvider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full; 
                BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
                System.Collections.IDictionary props = new System.Collections.Hashtable(); 
                props["name"] = "ClientChannel"; 
                props["portName"] = Guid.NewGuid().ToString();
                props["typeFilterLevel"] = "Full"; 

                // When communicating between application domains on the same computer, the ipc channel is much faster than the tcp
                IChannel ichannel = new AddInIpcChannel(props, clientProvider, serverProvider);
 
                // (
                ChannelServices.RegisterChannel(ichannel, false); 
            } 
        }
 
        // AddinServer is a singleton per process. It is created at process creation.
        // The AddinServer is the Marshaled class used to hook up the Client and Server remoting channel.
        // 
        //  
        // 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] 
        [System.Security.SecuritySafeCritical] 
        internal static AddInServer GetAddInServer(string guid)
        { 
            System.Diagnostics.Contracts.Contract.Requires(guid != null && guid != s_emptyGuid);

            return (AddInServer)Activator.GetObject(Type.GetType(@"System.AddIn.Hosting.AddInServer")
                    , @"ipc://" + guid + @"/AddInServer"); 
        }
    } 
 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK