/// <summary> /// Erzeugt einen fertig konfigurierten Remoting-Kanal. /// <remarks> /// Wenn der Kanal in der aktuellen Anwendungsdomäne bereits registriert wurde, wird null zurückgegeben. /// </remarks> /// </summary> /// <returns>Remoting Kanal</returns> public IChannel CreateChannel() { // Kanal suchen IChannel channel = ChannelServices.GetChannel(_channelName); // Wenn der Kanal nicht gefunden wurde ... if (channel == null) { // Konfiguration für den TCP-Kanal erstellen System.Collections.IDictionary channelSettings = new System.Collections.Hashtable(); channelSettings["name"] = _channelName; channelSettings["port"] = _tcpPort; channelSettings["socketCacheTimeout"] = 0; channelSettings["socketCachePolicy"] = SocketCachingEnabled ? SocketCachePolicy.Default : SocketCachePolicy.AbsoluteTimeout; // Standardmäßige Windows-Authentifizierung des Remoting TCP-Kanals abschalten channelSettings["secure"] = false; // Binären Clientformatierer erzeugen BinaryClientFormatterSinkProvider clientFormatter = new BinaryClientFormatterSinkProvider(); // Wenn die Kommunikation verschlüsselt werden soll ... if (_encryption) { // Client-Verschlüsselungs-Kanalsenkenanbieter erzeugen CryptoClientChannelSinkProvider clientEncryption = new CryptoClientChannelSinkProvider(); // Verschlüsselung konfigurieren clientEncryption.Algorithm = _algorithm; clientEncryption.Oaep = _oaep; // Verschlüsselungs-Kanalsenkenanbieter hinter den Formatierer hängen clientFormatter.Next = clientEncryption; } // Variable für ersten Server-Senkenanbieter in der Kette IServerChannelSinkProvider firstServerSinkProvider=null; // Binären Serverformatierer erzeugen BinaryServerFormatterSinkProvider serverFormatter = new BinaryServerFormatterSinkProvider(); // Binäre Serialisierung von komplexen Objekten aktivieren serverFormatter.TypeFilterLevel = TypeFilterLevel.Full; // Wenn die Kommunikation verschlüsselt werden soll ... if (_encryption) { // Server-Verschlüsselungs-Kanalsenkenanbieter erzeugen CryptoServerChannelSinkProvider serverEncryption = new CryptoServerChannelSinkProvider(); // Verschlüsselung konfigurieren serverEncryption.Algorithm = _algorithm; serverEncryption.Oaep = _oaep; serverEncryption.RequireCryptoClient = true; // Formatierer hinter den Verschlüsselungs-Kanalsenkenanbieter hängen serverEncryption.Next = serverFormatter; // Verschlüsselungs-Kanalsenkenanbieter als ersten Senkenanbieter festlegen firstServerSinkProvider = serverEncryption; } else // Server-Formatierer als ersten Senkenanbieter festlegen firstServerSinkProvider = serverFormatter; // Neuen TCP-Kanal erzeugen channel = new TcpChannel(channelSettings, clientFormatter, firstServerSinkProvider); // Wenn Zyan nicht mit mono ausgeführt wird ... if (!MonoCheck.IsRunningOnMono) { // Sicherstellen, dass vollständige Ausnahmeinformationen übertragen werden if (RemotingConfiguration.CustomErrorsMode != CustomErrorsModes.Off) RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off; } // Kanal zurückgeben return channel; } // Nichts zurückgeben return null; }
/// <summary> /// Erzeugt einen fertig konfigurierten Remoting-Kanal. /// <remarks> /// Wenn der Kanal in der aktuellen Anwendungsdomäne bereits registriert wurde, wird null zurückgegeben. /// </remarks> /// </summary> /// <returns>Remoting Kanal</returns> public IChannel CreateChannel() { // Kanal suchen IChannel channel = ChannelServices.GetChannel(_channelName); // Wenn der Kanal nicht gefunden wurde ... if (channel == null) { // Konfiguration für den HTTP-Kanal erstellen System.Collections.IDictionary channelSettings = new System.Collections.Hashtable(); channelSettings["name"] = _channelName; channelSettings["port"] = 0; // Variable für Clientformatierer IClientFormatterSinkProvider clientFormatter = null; // Wenn binäre Formatierung verwendet werden soll ... if (_useBinaryFormatter) // Binären Clientformatierer erzeugen clientFormatter = new BinaryClientFormatterSinkProvider(); else // SOAP Clientformatierer erzeugen clientFormatter = new SoapClientFormatterSinkProvider(); // Wenn die Kommunikation verschlüsselt werden soll ... if (_encryption) { // Client-Verschlüsselungs-Kanalsenkenanbieter erzeugen CryptoClientChannelSinkProvider clientEncryption = new CryptoClientChannelSinkProvider(); // Verschlüsselung konfigurieren clientEncryption.Algorithm = _algorithm; clientEncryption.Oaep = _oaep; clientEncryption.MaxAttempts = _maxAttempts; // Verschlüsselungs-Kanalsenkenanbieter hinter den Formatierer hängen clientFormatter.Next = clientEncryption; } // Variable für ersten Server-Senkenanbieter in der Kette IServerChannelSinkProvider firstServerSinkProvider = null; // Variable für Serverformatierer IServerFormatterSinkProvider serverFormatter = null; // Wenn binäre Formatierung verwendet werden soll ... if (_useBinaryFormatter) { // Binären Serverformatierer erzeugen serverFormatter = new BinaryServerFormatterSinkProvider(); // Serialisierung von komplexen Objekten aktivieren ((BinaryServerFormatterSinkProvider)serverFormatter).TypeFilterLevel = TypeFilterLevel.Full; } else { // SOAP Serverformatierer erzeugen serverFormatter = new SoapServerFormatterSinkProvider(); // Serialisierung von komplexen Objekten aktivieren ((SoapServerFormatterSinkProvider)serverFormatter).TypeFilterLevel = TypeFilterLevel.Full; } // Wenn die Kommunikation verschlüsselt werden soll ... if (_encryption) { // Server-Verschlüsselungs-Kanalsenkenanbieter erzeugen CryptoServerChannelSinkProvider serverEncryption = new CryptoServerChannelSinkProvider(); // Verschlüsselung konfigurieren serverEncryption.Algorithm = _algorithm; serverEncryption.Oaep = _oaep; serverEncryption.RequireCryptoClient = true; // Formatierer hinter den Verschlüsselungs-Kanalsenkenanbieter hängen serverEncryption.Next = serverFormatter; // Verschlüsselungs-Kanalsenkenanbieter als ersten Senkenanbieter festlegen firstServerSinkProvider = serverEncryption; } else // Server-Formatierer als ersten Senkenanbieter festlegen firstServerSinkProvider = serverFormatter; // Neuen HTTP-Kanal erzeugen channel = new HttpChannel(channelSettings, clientFormatter, firstServerSinkProvider); // Wenn Zyan nicht mit mono ausgeführt wird ... if (!MonoCheck.IsRunningOnMono) { // Sicherstellen, dass vollständige Ausnahmeinformationen übertragen werden if (RemotingConfiguration.CustomErrorsMode != CustomErrorsModes.Off) RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off; } // Kanal zurückgeben return channel; } // Nichts zurückgeben return null; }