Как я могу использовать ClearCanvas в удаленной базе данных?

Как я могу получить данные из удаленной базы данных, используя метод OnStart?

 protected override int OnStart(StudyLoaderArgs studyLoaderArgs)
        {
            ApplicationEntity ae = studyLoaderArgs.Server as ApplicationEntity;
            _ae = ae;

            EventResult result = EventResult.Success;
            AuditedInstances loadedInstances = new AuditedInstances();
            try
            {

                XmlDocument doc = RetrieveHeaderXml(studyLoaderArgs);
                StudyXml studyXml = new StudyXml();
                studyXml.SetMemento(doc);

                _instances = GetInstances(studyXml).GetEnumerator();

                loadedInstances.AddInstance(studyXml.PatientId, studyXml.PatientsName, studyXml.StudyInstanceUid);

                return studyXml.NumberOfStudyRelatedInstances;

            } 
            finally 
            {
                AuditHelper.LogOpenStudies(new string[] { ae.AETitle }, loadedInstances, EventSource.CurrentUser, result);
            }
        }

Мне нужно использовать OnStart в основном проекте. Как я могу использовать или вызвать метод OnStart

1 ответ

Просто мысль, OnStart это событие; если вы можете предоставить StudyLoaderArgs как-то, тогда вы можете переместить свой код в Init(ApplicationEntity) метод и вызвать его следующим образом:

Init(myStudyArgs);

И в OnStart:

protected override int OnStart(StudyLoaderArgs studyLoaderArgs)
{
    Init(StudyLoaderArgs.Server as ApplicationEntity);
}

--РЕДАКТИРОВАТЬ--

  1. Переместить существующий OnStart() тело в Init()

    void Init(ApplicationEntity ae) { EventResult result = EventResult.Success; AuditedInstances loadedInstances = new AuditedInstances(); пытаться {

        XmlDocument doc = RetrieveHeaderXml(studyLoaderArgs);
        StudyXml studyXml = new StudyXml();
        studyXml.SetMemento(doc);
    
        _instances = GetInstances(studyXml).GetEnumerator();
    
        loadedInstances.AddInstance(studyXml.PatientId, studyXml.PatientsName, studyXml.StudyInstanceUid);
    
        return studyXml.NumberOfStudyRelatedInstances;
    
    } 
    finally 
    {
        AuditHelper.LogOpenStudies(new string[] { ae.AETitle }, loadedInstances, EventSource.CurrentUser, result);
    }
    

    }

  2. Вызов Init() от OnStart()

    защищенное переопределение int OnStart(StudyLoaderArgs studyLoaderArgs) { ApplicationEntity ae = studyLoaderArgs.Server as ApplicationEntity; _ae = ae; Иниц (ае); }

  3. OnStart() является событием и будет вызываться при запуске службы (при условии, что это служба). Чтобы быть более конкретным, события не должны быть вызваны, скорее события вызываются как уведомление о том, что что-то произошло; все, что мы делаем, это обрабатываем событие; т.е. зарегистрировать метод в качестве обработчика для этого события, и тогда этот метод будет вызываться каждый раз, когда событие вызывается.

Итак, чтобы достичь желаемого, вы можете позвонить Init() скорее, чем OnStart(); но позвонить Init() Вы должны будете предоставить входные аргументы, как говорится в моем первом предложении - или это будет что-то вроде OnStart(EventArgs.Empty);

Не уверен, что это ответ на ваш вопрос, но выше вершины моего черепа! (0:

Другие вопросы по тегам