Почему бы не создать такой вызов, как:
Service.GetCustomers();
, который не является асинхронным.
Язык определения интерфейсов (IDL) используется для установки связи между клиентами и серверами в вызовах удаленной процедуры (RPC). Было много изменений этого, таких как RPC Sun, RPC ONC, RPC DCE и так далее.
В основном, Вы используете IDL для определения интерфейса между клиентом и сервером так, чтобы механизм RPC мог создать тупики кода, требуемые вызывать функции по сети.
RPC должен создать интерфейсные функции для клиента и сервера, с помощью информации о IDL. Это очень похоже на прототипа функции в C, но конечный результат немного отличается, таков как:
+----------------+
| Client |
| +----------+ | +---------------+
| | main | | | Server |
| |----------| | | +----------+ |
| | stub_cli |------->| stub_svr | |
| +----------+ | | |----------| |
+----------------+ | | function | |
| +----------+ |
+---------------+
В этом примере, вместо того, чтобы звонить function
в ту же программу, main
вызовы клиентская интерфейсная функция (с тем же прототипом как function
), который ответственен за упаковку информации и получения его через провод к другому процессу. Это может быть той же машиной или другой машиной, она действительно не имеет значения - одно из преимуществ RPC должно быть в состоянии переместить серверы по желанию.
В сервере, существует процесс 'слушателя', который получит ту информацию и передаст ее серверу. Тупик сервера получает информацию, распаковывает ее и передает ее реальной функции.
реальная функция тогда делает то, что она должна и возвращается к тупику сервера, который может упаковать информацию о возврате (и код возврата и любой [out]
или [in,out]
переменные) и пасовать назад ее к клиентскому тупику.
клиентский тупик тогда распаковывает это и пасует назад его к main
.
фактические детали могут отличаться немного, но то объяснение должно быть достаточно хорошим для концептуального обзора.
фактический IDL может быть похожим:
[uuid(f9f6be21-fd32-5577-8f2d-0800132bd567),
version(0),
endpoint("ncadg_ip_udp:[1234]", "dds:[19]")]
interface function_iface {
[idempotent] void function(
[in] int handle,
[out] int *status
);
}
Все это наверху является в основном сетевой информацией, суть его в интерфейсном разделе, где прототипы показывают. Это позволяет компилятору IDL создавать x функции тупикового и X-сервера для компиляции и соединения с Вашим кодом клиента и сервера для получения работы RPC.
Microsoft действительно использует IDL (я думаю, что у них есть компилятор MIDL) для материала COM. Я также использовал сторонние продукты с операционными системами MS, и DCE и RPC ONC.
Это - язык, который использовался в эру COM для определения интерфейсов (предположительно), нейтральным в отношении языка способом.
Это определяет интерфейс, который будет использоваться для связи с представленным сервисом в другом приложении.
при использовании SOAP, Вы будете знать о WSDL. WSDL является другой формой IDL. IDL обычно относится к Microsoft COM или IDL CORBA.
Существует также Интерактивный Язык описания данных , который у меня было использование задания для анализа научных данных, но возможно от контекста это ясно Вам, это не то, что обозначает этот IDL.