public void ProvideFault(Exception ex, MessageVersion version, ref Message msg)
        {
            _logger.Error("ServiceExceptionsHandler received unhandled exception", ex);

            var fe = new FaultException <UnhandledException>(UnhandledException.CreateFromEx(ex));
            var mf = fe.CreateMessageFault();

            msg = Message.CreateMessage(version, mf, string.Empty);

            _logger.Error("ServiceExceptionsHandler handled exception and sent ex data to client");
        }
Esempio n. 2
0
        public void Deploy(DeployContext context, byte[] filesHash)
        {
            if (!_accessIsGranted)
            {
                throw new AuthenticationException("Session should be terminated because access wasn't granted");
            }
            if (_filesBuffer == null || _filesBuffer.Length == 0)
            {
                throw new InvalidOperationException("Files was not transfered before deployment");
            }
            if (!FileHashIsEqual(filesHash, MD5.Create().ComputeHash(_filesBuffer)))
            {
                throw new ArgumentException("File sending was failed because it's hash is wrong");
            }
            var callback = _dsFactory.CreateCallbackObj();

            try {
                _accessIsGranted = false;
                var conf = _dsFactory.CreateConfObj(_sessionKey, context, _cFactory);
                if (!GetDirectoryName(conf.SurveyPath.Survey).Equals(_updatedForlder, StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new ArgumentException("Current session allows deploy only to '" + _updatedForlder + "' folder");
                }

                _logger.Info(string.Format("Starting deploy process for folder '{0}'", _updatedForlder));

                RunDeployment(conf, callback, context, _filesBuffer);

                _logger.Info("Deploy completed successfully");
            } catch (Exception ex) {
                callback.OnFault(UnhandledException.CreateFromEx(ex));
                throw;
            } finally {
                callback.OnClose();
                Dispose();
            }
        }