Delphi excel сервер rpc недоступен
← →
Weare ( 2005-10-07 18:03 ) [5]
Причем тут вирусы, тут где-то ресурсы не высвобождаются
← →Lexer © ( 2005-10-07 18:04 ) [6]
При этом подходе [4] можешь заменить
WordApplication1.Documents.Open(FileName,EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam);
на
WordApplication1.Documents.Open(FileName);
Weare ( 2005-10-07 18:06 ) [7]
Я использую компоненту TWorldApplication c закладки Servers, и эта компонента не поддерживает Unassigned
← →sniknik © ( 2005-10-07 18:17 ) [8]
если есть Connect то должен быть и Disconnect гдето.
← →Weare ( 2005-10-07 18:22 ) [9]
> to sniknik © (07.10.05 18:17) [8]
попробовал, все тоже самое
Lexer © ( 2005-10-07 18:24 ) [10]
> sniknik © (07.10.05 18:17) [8]
>если есть Connect то должен быть и Disconnect гдето.
Дисконнект не помогает, сам сталкивался с этим.
← →Lexer © ( 2005-10-07 18:30 ) [11]
Я использую компоненту TWorldApplication c закладки Servers, и эта компонента не поддерживает Unassigned
Зато OleVariant поддерживает.
← →sniknik © ( 2005-10-07 20:22 ) [12]
>> to sniknik © (07.10.05 18:17) [8]
> попробовал, все тоже самое
>> sniknik © (07.10.05 18:17) [8]
>>если есть Connect то должен быть и Disconnect гдето.
WordApplication1.Connect;
WordApplication1.Documents.OpenOld(FileName, EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
WordDocument1.Disconnect;
WordApplication1.Quit;
WordApplication1.Disconnect;
Label1.Caption:= IntToStr(StrToIntDef(Label1.Caption, 0)+1);
end;
на Old не обращайте внимания, это от 2003 офиса. ну и естественно я не разбирался что там нужно не нужно, просто ляпнул в код дистконекты.
до 4х досчитало. дальше не стал
← →Weare ( 2005-10-07 20:59 ) [13]
>to sniknik © (07.10.05 20:22) [12]
ОГРОМНОЕ СПАСИБО, ЗАРАБОТАЛО.
Не понятно только почему после WordApplication1.Quit необходимо делать WordApplication1.Disconnect, но именно из-за этой последней строчки у меня и не отрабатывало.
Я просмотрел этот форум, и нашел аналогичные вопросы, но на них ответы так и не даны . возможно, для кого-то ответ очевиден, но для меня, и думаю для многих, он покрыт тайной .
Пожалуйста, не игнорируйте, дайте хоть намек в чем ошибка.
И вообще может стоит уже добавить этот вопрос в FAQ, а то здешний FAQ не очень богат ответами на эту тему .
З.Ы.У меня такая же байда с запуском\остановкой\получением_списка СЕРВИСОВ.Пока не разобрался. :(
← →Mr © ( 2004-11-09 07:48 ) [2]
Сервер XP(SP2), а клиент 98
← →Dok_3D © ( 2004-11-09 09:21 ) [3]
Вероятные причины:
1. Клиент "не видит" компьютер сервера в сети.
2. На сервере служба "Удаленный вызов процедур (RPC)" не запущена.
3. На сервере закрыты 135, 139, 445, 593 порты (это наиболее вероятно).
Выбирай на вкус!
← →mak © ( 2004-11-09 14:48 ) [4]
А также возможен msblast, которого хлебом не корми, только дай RPC уронить :)
← →Mr © ( 2004-11-09 17:32 ) [5]
1. Клиент видет ПК сервера в сети
2. RPC запущен . во всяком случае так пишется, что он запущен .
3. Открыты следующие порты: 135, 139, 445. А 593 не окрыт, а что эта за сервис.
msblast - этих червей я не выращиваю.
А если в качестве хоста сервера задавать не имя компьютера, а его IP-адрес?
Работает?
GanibalLector © ( 2004-11-11 01:11 ) [9]
2 Dok_3D
К сожалению проверить уже не могу. комп с XP уже ушел.
Mr © ( 2004-11-11 08:10 ) [10]
проверил с 2-я XP. при первом запуске написал, что отказано в доступе, в dcomcnfg назначил права, после чего тодже - Сервер RPC недоступен. Если вместо имени написать IP, то ПК думает дольше, но в итоге всеравно - Сервер RPC недоступен.
← →Mr © ( 2004-11-11 08:45 ) [11]
Прошу прощения за ввод в заблуждение.
после чего тодже - Сервер RPC недоступен
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - это были проблемы с сетью.
- установил . и даже настроил ..
← →Eugenez ( 2004-11-17 17:14 ) [14]
И даже запустил \Windows\system\WBEM\winmgmt.exe ?
← →ИМХО © ( 2004-04-21 16:12 ) [0]
Что за зверь?
← →ИМХО © ( 2004-04-21 16:12 ) [0]
Что за зверь?
← →Romkin © ( 2004-04-21 16:18 ) [1]
Скорее всего сервер приложений грохнулся :)
Или приложение, вызванное через DCOM
RPC - Remote Procedure Call, все через него идет
Romkin © ( 2004-04-21 16:18 ) [1]
Скорее всего сервер приложений грохнулся :)
Или приложение, вызванное через DCOM
RPC - Remote Procedure Call, все через него идет
ИМХО © ( 2004-04-21 16:22 ) [2]
В проге используется OLE-автоматизация (MS Excel).
Как это лечится?
← →ИМХО © ( 2004-04-21 16:22 ) [2]
В проге используется OLE-автоматизация (MS Excel).
Как это лечится?
← →han_malign © ( 2004-04-21 16:31 ) [3]
в сервисах выглядит как
Display name: Remote Procedure Call (RPC)
Description: Provides the endpoint mapper and other miscellaneous RPC services.
Path to executable: C:\WINDOWS\system32\svchost -k rpcss
от него зависят, у меня(под XP) - 32 сервиса, приводить все не буду. Хотя, в w2k, кроме Telephony, его никто и не хотел.
З.Ы. Чьи-то шаловливые ручки, его задизаблили(в закладке Log on).
← →han_malign © ( 2004-04-21 16:31 ) [3]
в сервисах выглядит как
Display name: Remote Procedure Call (RPC)
Description: Provides the endpoint mapper and other miscellaneous RPC services.
Path to executable: C:\WINDOWS\system32\svchost -k rpcss
от него зависят, у меня(под XP) - 32 сервиса, приводить все не буду. Хотя, в w2k, кроме Telephony, его никто и не хотел.
han_malign © (21.04.04 16:31) [3]
В 2000 от него зависит буквально всё, что работает с COM :) выключение этого сервиса приводит к падению офиса, выключению буфера обмена, падению MS SQL и т.д. и т.п.
если ты осуществляешь обращение к Excel-серверу локально (т.е. и контроллер и сервер должны общаться в пределах одной и той же лок.машины), никакие RPC-серверы как посредники при такой схеме вовсе не нужны. другое дело, когда ты пытаешься обратиться к Excel-серверу, который установлен на другой машине в сети . здесь на сцену выступает DCOM-механизм, который без RPC-механизма - пустое место .. RPC-же механизм реализован (в случае с НТ-платформой) в виде сервиса, который в какой-то момент при каккой-то ситуации может быть вовсе и не стартован (на момент обращения удаленного контроллера к серверу), а в худшем случае - вообще деинсталлирован чьими-то "золотыми" руками-головой
← →Digitman © ( 2004-04-21 16:46 ) [5]
> ИМХО © (21.04.04 16:22) [2]
> В проге используется OLE-автоматизация (MS Excel).
если ты осуществляешь обращение к Excel-серверу локально (т.е. и контроллер и сервер должны общаться в пределах одной и той же лок.машины), никакие RPC-серверы как посредники при такой схеме вовсе не нужны. другое дело, когда ты пытаешься обратиться к Excel-серверу, который установлен на другой машине в сети . здесь на сцену выступает DCOM-механизм, который без RPC-механизма - пустое место .. RPC-же механизм реализован (в случае с НТ-платформой) в виде сервиса, который в какой-то момент при каккой-то ситуации может быть вовсе и не стартован (на момент обращения удаленного контроллера к серверу), а в худшем случае - вообще деинсталлирован чьими-то "золотыми" руками-головой
← →VMcL © ( 2004-04-21 17:37 ) [6]
>>ИМХО © (21.04.04 16:12)
Есть еще один вариант:
Проверься на вирусы на всякий пожарный. AFAIR, msblast и т. п. звери вызывают AV в RPC-сервисе и тот слетает; причем, чтобы он снова стартанул, нужно ребутиться.
VMcL © ( 2004-04-21 17:37 ) [6]
>>ИМХО © (21.04.04 16:12)
Есть еще один вариант:
Проверься на вирусы на всякий пожарный. AFAIR, msblast и т. п. звери вызывают AV в RPC-сервисе и тот слетает; причем, чтобы он снова стартанул, нужно ребутиться.
pasha_golub © ( 2004-04-21 18:01 ) [7]
VMcL © (21.04.04 17:37) [6]
Совершенно верно. Присоеденеяюсь. Я тоже очень долго грешил на все что двигалось, оказалось дыра. После анитвируса обязательно поставить все апдейты и Service Pack
Для чего нужна служба "Удаленный вызов процедур (RPC)"
Удаленный вызов процедур (RPC) - это протокол, который одна программа может использовать для запроса услуги у программы, расположенной на другом компьютере в сети, без необходимости разбираться в деталях сети. RPC используется для вызова других процессов на удаленных системах, таких как локальная система. Вызов процедуры также иногда называют вызовом функции или вызовом подпрограммы .
RPC использует модель клиент-сервер. Запрашивающая программа - это клиент, а программа, предоставляющая услуги, - это сервер. Подобно обычному или локальному вызову процедуры, RPC - это синхронная операция, требующая приостановки запрашивающей программы до тех пор, пока не будут возвращены результаты удаленной процедуры. Однако использование облегченных процессов или потоков, которые совместно используют одно и то же адресное пространство, позволяет одновременно выполнять несколько RPC.
Язык определения интерфейса (IDL) - язык спецификации, используемый для описания интерфейса прикладного программирования (API) программного компонента - обычно используется в программном обеспечении удаленного вызова процедур. В этом случае IDL обеспечивает мост между машинами на обоих концах связи, которые могут использовать разные операционные системы (ОС) и компьютерные языки.
Когда программные операторы, использующие структуру RPC, компилируются в исполняемую программу, в скомпилированный код включается заглушка, которая выступает в качестве представителя кода удаленной процедуры. Когда программа запускается и выполняется вызов процедуры, заглушка получает запрос и пересылает его клиентской программе и времени выполнения на локальном компьютере. При первом вызове клиентской заглушки она связывается с сервером имен, чтобы определить транспортный адрес, по которому находится сервер.
Данная служба есть в любой операционной системе Windows, начиная от Windows 7 и заканчивая Windows 11 и в любой из Windows Server редакции.
Как работает RPC?
Когда вызывается служба RPC (удаленный вызов процедуры), вызывающая среда приостанавливается, параметры процедуры передаются по сети в среду, в которой должна выполняться процедура, а затем процедура выполняется в этой среде. Когда процедура завершается, результаты передаются обратно в вызывающую среду, где выполнение возобновляется, как если бы оно возвращалось из обычного вызова процедуры.
Во время RPC выполняются следующие шаги:
Клиент RPC по 135 порту подключается к службе RPC Endpoint Mapper (сопоставления конечных точек), а далее уже запрашивает номер порта, где запущено нужное RPC приложение. Служба сопоставления конечных точек вернет клиенту RPC номер динамического RPC порта (диапазон 1024 – 65535), на котором работает нужная служба. Дальше уже все взаимодействие идет по TCP порту
Если вы видите ошибку "Сервер RPC недоступен” (The RPC server is unavailable)", то у вас точно недоступен порт 135. Это может быть критичным для ряда ситуации. Например вы не сможете сохранить настройки RDS фермы, если у одного из хостов RDSH есть проблемы с RPC, то вы будите видеть ошибку "Could not change the connection state for server", вы не сможете перевести его в режим обслуживания (Drain Mode)
Или в приложении Terminal Services Manager будет ошибка при попытке получения данных "Сервер RPC недоступен".
Так же RPC может быть причиной проблемы в репликации контроллеров домена, где в логах Windows будет фигурировать ошибка ID 1722. Это очень не приятный момент, который может привести к большим проблемам.
Типы RPC
Существует пять типов RPC:
Почему может не работать служба RPC
- Удаленный компьютер с которым идет взаимодействие выключен
- На удаленном сервере не запущена или перестала работать служба RPC
- Подключение по RPC происходит не к тому серверу (Может быть проблема с DNS или IP адресом)
- Есть блокировки между клиентом и сервером на фаэрволе
- Используются некорректные настройки сетевого подключение на клиенте или сервере
Преимущества удаленного вызова процедур
К преимуществам удаленного вызова процедур можно отнести следующее:
Недостатки RPC
Некоторые из недостатков RPC включают следующее:
- Клиент и сервер используют разные среды выполнения для своих соответствующих подпрограмм, и использование ресурсов, например файлов, также является более сложным. Следовательно, системы RPC не подходят для передачи больших объемов данных.
- RPC очень уязвим для сбоев, потому что он включает в себя систему связи, другую машину и другой процесс.
- Единого стандарта для RPC не существует; это может быть реализовано множеством способов.
- RPC основан только на взаимодействии и, как таковой, не предлагает гибкости, когда дело касается аппаратной архитектуры.
Проверка доступности службы RPC
Если вдруг компьютер не ответил, то это не значит, что он не работает, может работать брандмауэр и просто блокировать ping пакеты.
- Далее выполните Nslookup, чтобы удостовериться, что нужное вам имя компьютера преобразовывается в нужный IP-адрес. Выполните:
Небольшой пример из практики, предположим, что вы мигрировали сервер в другую подсеть, в итоге в DNS должна быть изменена соответствующая запись, но Windows это поймет не сразу, так как у нее есть свой локальный кэш, он живет 15 минут, поэтому если при проверке DNS имени вам выдается не тот IP-адрес, вам необходимо произвести очистку кэша DNS.
- Далее я вам советую проверить отвечает ли порт. Напоминаю, что служба RPC Endpoint Mapper слушает порт под номером 135. В PowerShell введите команду:
Если удаленный RPC порт доступен вы в в строке TcpTestSucceeded будет стоять статус "True".
Если будет порт закрыт или блокируется, то ошибка "Сервер RPC недоступен (The rpc server is unavailable)" вам обеспечена. Поняв, что порт не отвечает, нужно удостовериться, что трафик от клиента до сервера не блокирует фаервол. По умолчанию в любой версии Windows есть встроенный брандмауэр. На время тестирования и поиска причины, я советую его выключить для всех профилей. Сделаем мы это через командную строку:
Данная команда выключит брандмауэр на всех трех профилях сетевой карты.
Далее если порт 135 стал доступен, то можно делать правила на удаленном сервере. Напоминаю, что нужно сделать правило для трех служб:
- Remote Procedure Call (RPC) - Удаленный вызов процедур (RPC)
- RPC Endpoint Mapper - Сопоставитель конечных точек RPC
- COM Server Process Launcher - Модуль запуска процессов DCOM-сервера
Еще хочу отметить, что если у вас есть сторонние антивирусные решения, например Касперский, то там так же есть встроенный сетевой экран, где так же нужно будет создать необходимые, разрешающие правила, которые корректно будут обрабатывать трафик динамических RPC портов.
Проверка работы служб RPC
Следующим шагом является проверка состояния службы на нужном вам сервере или компьютере. Проверять следует три службы:
- Remote Procedure Call (RPC) - Удаленный вызов процедур (RPC)
- RPC Endpoint Mapper - Сопоставитель конечных точек RPC
- COM Server Process Launcher - Модуль запуска процессов DCOM-сервера
В оболочке PowerShell выполните команду:
Для локального сервера - Get-Service RpcSs,RpcEptMapper,DcomLaunch| Select DisplayName,Status,StartType
Для удаленного выполнения Enter-PSSession svt2019s01 далее Get-Service RpcSs,RpcEptMapper,DcomLaunch| Select DisplayName,Status,StartType
Напоминаю, что в команде svt2019s01, это имя удаленного сервера. Как видно из примера, все службы RPC запущены и имею автоматический тип запуска.
Если службы не запущены, то откройте оснастку "services.msc', зайдите в свойства службы и выставите автозапуск и попробуйте запустить вручную.
- Модуль запуска процессов DCOM-сервера — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DcomLaunch
- Сопоставитель конечных точек RPC — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcEptMapper
- Удаленный вызов процедур (RPC) — ветка реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcSs
В каждом из этих расположений есть ключик "Start", выставите ему значение "2", это будет означать автоматический запуск службы.
Дополнительные сетевые проверки
В некоторых случаях причиной ошибок с доступностью RPC выступает сбой на сетевых адаптерах. Помогает сброс сетевых настроек и перезагрузка. В сети с Active Directory, старайтесь, чтобы на всех ваших сетевых адаптерах в свойствах были выставлены обе галки IPV4 и IPV6, особенно это актуально для контроллеров домена, где вы легко можете получать ошибку 1722. Еще может помочь отключение протокола Teredo у IPv6. В командной строке выполните:
Для включения обратно введите:
Устраняем ошибку 1722 сервер rpc недоступен
Сетевые проблемы с репликацией и их решение, читайте по ссылке выше, про 14550. И так напомню, у меня есть два домена, родительский и дочерний. В дочернем 3 контроллера домена Active Directory. После переноса одного контроллера домена из одного сайта, ко всем остальным стали появляться ошибки 1722. Сервер RPC не доступен и сервер RPC и за последние 24 часа после предоставления SYSVOL.
Выявил я их при диагностики репликации между контроллерами домена, с помощью команды:
Данная команда показывает все ошибки репликации на предприятии. Вот как выглядит ошибка:
Первым делом, чтобы проверить, что с репликацией все хорошо, нужно удостовериться, что по UNC пути \\ваш домен доступна на чтение папка SYSVOL и NETLOGON.
Если они не доступны, то нужно проверить права на папки и проверьте доступность портов службы RPC TCP/UDP 135, возможно у вас они закрыты на брандмауэре. Если все нормально, то двигаемся дальше. Давайте теперь проверим, когда в последний раз реплицировались контроллеры домена, делается это командой:
В итоге я обнаружил, что у меня dc7 и dc13 имеют ошибку 1722 Сервер RPC недоступен. Порты 135 я проверил, они слушались. Кто не знает как проверить, то вот вам команда telnet в помощь.
Следующим шагом, идет проверка DNS серверов, в настройках стека TCP/IP. Если у вас более одного контроллера домена, то у вас первым dns сервером в настройках сетевого интерфейса должен идти dns другого контроллера домена, затем либо адрес текущего или петлевой Ip, а уже затем любые, что вам нужны.
Теперь снова выполнив команду repadmin /replsummary, я увидел, что все репликации прошли успешно. Так же советую запустить вручную репликацию AD. и проверить нет ли ошибок, убедитесь, так же, что команда dcdiag /a /q не дает ошибок.
Вот так вот просто решается ошибка 1722 сервер RPC не доступен на контроллере домена по Windows Server 2012 R2. Если у вас есть чем дополнить статью, то просьба написать это в комментариях.
Читайте также: