示例#1
0
		void TryLoad(IServiceProvider serviceProvider)
		{
			const int tryCount = 20;
			const int waitTimeMS = 500;
			
			for (int i = 0; i < tryCount; ++i) {
				bool success = false;
				
				try {
					
					serviceInstance = new ReflectorService(serviceProvider);
					
					Dictionary<string, object> props = new Dictionary<string, object>();
					props.Add("name", "Reflector IPC server");
					props.Add("secure", true);
					props.Add("portName", "ReflectorService");
					// The following line is needed to fix an "access denied" error
					// when Reflector is restarted within a certain amount of time
					props.Add("exclusiveAddressUse", false);
					
					channel = new IpcServerChannel(props, null);
					ChannelServices.RegisterChannel(channel, true);
					
					RemotingServices.Marshal(serviceInstance, "ReflectorService.rem");
					
					success = true;
					return;
					
				} catch (RemotingException) {
					if (!((i + 1) < tryCount)) {
						throw;
					}
				} finally {
					if (!success) {
						Unload();
					}
				}
				
				System.Threading.Thread.Sleep(waitTimeMS);
			}
		}
示例#2
0
		public void Unload()
		{
			if (serviceInstance != null) {
				try {
					serviceInstance.Dispose();
				} catch {
				}
				try {
					RemotingServices.Disconnect(serviceInstance);
				} catch (RemotingException) {
				}
				serviceInstance = null;
			}
			if (channel != null) {
				try {
					ChannelServices.UnregisterChannel(channel);
				} catch (RemotingException) {
				}
				channel = null;
			}
		}