亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

連接Corba和dotNet

2024-07-21 02:23:30
字體:
來源:轉載
供稿:網友

corba, 公用對象請求代理程序結構(common object request broker architecture)的首字母縮寫,在跨平臺和跨語言(如j2ee)的分布式(多層)系統通信中具有廣泛的應用,將corba連接到dotnet(在多層應用中,asp.net web services and .net remoting 是其主要應用方式)是不容易的。要連接這兩者,就需要一個能將dotnet的object描述成corba的object,以至于j2ee能使它們交互的方法,同樣,也能將corba的object描述成dotnet的object,讓dotnet的code能認識。換句話說,需要一些中間代碼能翻譯corba和dotnet framework之間的這些對象和方法調用。borland的janeva可以做到這一點。它簡化了corba或j2ee和dotnet之間的處理過程。

getting started
在開始之前,你需要有一個corba server,盡管有很多讀者都有而且在運行,但是還有很多沒有,所以,本文第一步就演示如何用c++創建一個簡單的corba server以練習和測試。要說明的是corba server同樣可以用java,delphi 以及其它語言編寫。第二步演示如何利用janeva連接這個server。

本例中的server是用borland c++builder 6 enterprise.創建的。如果沒有borland c++builder,你可以下載編譯過的server,這個server是基于一個個人議事日程的系統,用來安排電子會議。這個日程編排的細節對于本文來說不是很重要。重要的是如何你用janeva連接servere和client。

build a corba server
to build the corba server, start c++builder, click the file | new menu, select other and go to the multitier tab of the object repository (see figure 1).




figure 1. c++builder object repository: the object repository contains a list of the items available



figure 2. corba server wizard: you use this wizard to specify project options for a new corba server project.

a number of icons appear in the dialog related to corba. to start a new corba server project from scratch, double-click on the corba server icon, which will display the corba server wizard so you can specify the options for the new project (see figure 2).

you can choose to create a console application (with or without using borland's visual component library) or a windows application. for this project, select the windows application option, because it's convenient to have the server display some visual (debug) information during development.

一個corba服務能包含一個或多個corba對象,這些corba對象的接口聲明通常都存儲在idl文件中,當新建一個corba服務時,可以選擇一個存在的idl 文件或者新建一個空idl文件,然后加入corba對象的定義,本例中的idl如下:

module diarysrv

{

struct datetime {

long date; // example: 20030929

long time; // example: 1200

};



interface icorbadiaryserver

{

exception meetingimpossible

{

string reason;

};



void meeting(in wstring names, in datetime daytime, in long duration)

raises (meetingimpossible);

};

};



當點擊corba server的向導ok按鈕后,c++builder會創建一個新的工程,將form保存為.mainform.cpp,工程文件保存為bcb6corbaserver.bpr。在ide中將diarysrv.idl加入工程。當你編譯這個工程,c++builder會運行idl2cpp工具,產生4個基于idl定義的文件,即diarysrv_c.cpp and diarysrv_c.hh (for the stub classes,客戶端使用) , diarysrv_s.cpp and diarysrv_s.hh (for the skeleton classes服務端使用)。




figure 3. corba object implementation wizard: you use this wizard to specify the idl file, select interface names, the delegation model, and other properties.

corba object implementation
分開skeleton和stub,要有一個能實際運行的diarysrv corba對象。可以使用向導。(see figure 1 for the icon in the object repository). click file | newother, go to the multitier tab, and double-click on the corba object implementation icon, which will display the dialog shown in figure 3。

對于每一個idl文件,可以選擇所有接口,根據你選擇的是delegation model、data module并且是否需要在winmain中創建一個對象示例,向導會建議你輸入單元名、類名等。

點擊ok,ide會產生兩個文件icorbadiaryserver.cpp,icorbadiaryserver.h。這就是寫實際運行的corba server對象實現的地方。部分代碼:

#pragma hdrstop



#include <corba.h>

#include "icorbadiaryserverserver.h"



#include "mainform.h"



//----------------------------------------------------



#pragma package(smart_init)





icorbadiaryserverimpl::icorbadiaryserverimpl(

const char *object_name):

_sk_diarysrv::_sk_icorbadiaryserver(object_name)

{

if (form1)

form1->caption =

"icorbadiaryserver up and running...";

}



void icorbadiaryserverimpl::meeting(

const corba::wchar* _names,

const diarysrv::datetime& _daytime, corba::long

_duration)

{

if (form1)

form1->memo1->lines->add(

"meeting with " + ansistring(_names));

if (_duration > 60)

throw

diarysrv::icorbadiaryserver::meetingimpossible(

"i don't like long meetings...");

}



figure 4 shows the running application.




figure 4. the running corba server: here's a screenshot of the completed corba server.

注意檢查會議時間的代碼,如果會議持續時間超過一個小時,會拋出一個錯誤信息:"i don't like long meetings.",很顯然,這個異常純粹是演示corba異常,以及c??蛻舳私邮懿⒒貞@個錯誤。

在運行corba server之前,要保證visibroker在運行狀態。



build a corba client
我已經用c#builder創建了一個dotnet corba的客戶端,但理論上來說,任何dotnet語言都是可以的。start c#builder enterprise or architect, and create a new c# application. in the new application dialog you can specify the name as well as the location of the new project (see figure 5).





borland janeva 1.0
borland janeva 可以讓microsoft .net framework 應用和j2ee/corba server 對象無縫結合并高效集成。c#builder的企業版和架構版都帶有janeva,你也可以到borland網站上下載(和其它dotnet 開發環境結合,詳細信息參見本文結尾)。




figure 6. add corba reference: janeva adds two items to the add references menu, letting you select j2ee or corba references as well as standard file or web references.

在免費注冊后,你可以得到一個用來測試的licence。但是,如果你要分發.net客戶端,則需要購買分發licence。

安裝完janeva,你就可以右擊c#builder中的工程文件,增加一個j2ee或corba引用(見圖6),沒有janeva,你只能增加普通接口或web reference。

因為本例是corba server,選擇增加corba引用,將會顯示一個對話框,可以選擇corba服務定義的idl文件。如圖7。

corba server應用發布“接口”定義是通過idl文件,支持corba客戶端應用的開發環境通常都支持將idl轉化為計算機語言,如c++、java,然而對于dotnet客戶端,必須要將idl轉化為dotnet語言,如vb.net 或c#,idl-to-c#(idl2cs)是borland janeva最受歡迎的特征。





figure 7. adding a corba reference: browse to the location of the diarysrv.idl file to add the reference.

注意,盡管你導入了corba server的定義,但是你還沒有指明如何連接它。

添加了idl文件后,janeva導入并編譯idl文件,產生一個相應的cs文件(diarysvr.cs)。




"figure 8. manual janeva compile: if you need to alter an idl file after adding it, right-click the file in project manager and select janeva compile from the context menu.

如果將來你要改變idl文件,可以在工程管理器中右擊idl文件(如圖8)選擇重新編譯。

要使用diarysrv.cs,在using中增加corba命名空間和產生的diarysrv命名空間。

using system;

using system.drawing;

using system.collections;

using system.componentmodel;

using system.windows.forms;

using system.data;



using corba;

using diarysrv;



在winform的構造函數中,創建orb(對象請求代理)的實例,來連接客戶端和服務端。要做到這樣,利用vbroker代理端口和14000參數(visibroker默認端口-譯者注)調用corba.orb.init即可。

我使用的是默認的14000端口,你可以使用另外的端口,端口的配置相信信息請參見corba orb的文檔。

string[] args = new string[]

{"-vbroker.agent.port", "14000"};

orb = corba.orb.init(args);

calling the corba server
配置完客戶端程序后,可以利用一個按鈕來創建corba diarysrv對象的實例。然后調用meeting方法。

private void button1_click(object sender,

system.eventargs e)

{

try

{

mycorbadiaryserver =

icorbadiaryserverhelper.bind(

"icorbadiaryserverobject");



diarysrv.datetime mydatetime = new

diarysrv.datetime();

mydatetime.date =

convert.toint32(textbox2.text);

mydatetime.time =

convert.toint32(textbox3.text);

mycorbadiaryserver.meeting(textbox1.text,

mydatetime, convert.toint32(textbox4.text));

}

catch

(diarysrv.icorbadiaryserverns.meetingimpossible

ex)

{

messagebox.show(ex.reason, "corba exception");

}

catch (exception ex)

{

messagebox.show(ex.message, "error");

}

}

對照代碼,可以發現:

首先,必須通過正確的名字(在corba服務端創建corba diary 服務對象時指定的,本例中為icorbadiaryserverobject)調用綁定方法。

綁定完corba服務器端對象后,才能調用meeting方法。但是不要沒有檢索date和time,并構造特殊的diarysrv.datetime(idl文件和corba服務端實現的類型) 對象。




figure 9. c#builder corba client: the figure shows the main window for the completed corba client running.

代碼還包含了4個label和textbox控件,用來讓最終用戶輸入meeting方法需要的名稱,日期,時間,持續時間等信息。在運行階段,應用程序效果如圖9

注意,持續時間設定為61分鐘,僅僅是讓corba客戶端拋出異常(如圖10)。




figure 10. corba exception: a messagebox display of an exception received by the c#builder corba client.

只有將時間限制在60分鐘內。就可以安全的增加會議安排到議事日程中。

你在這里所看到的就是janeva作為所謂的在corba server和dotnetclient間的企業應用 集成(eai)層。這項技術的主要優點就是你可以不需重寫或修改已經存在的corba服務就可以連接dotnet應用。



―――――――――――――――――――――――――――――――――――

第一次翻譯,請指正。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国产高清在线| 精品国产欧美成人夜夜嗨| 亚洲精品成人免费| 精品视频一区在线视频| 欧美在线一级va免费观看| 亚洲色图欧美制服丝袜另类第一页| 国产成人精品999| 午夜美女久久久久爽久久| 国产免费一区视频观看免费| 日本久久亚洲电影| 国产亚洲免费的视频看| 久久视频这里只有精品| 亚洲精品98久久久久久中文字幕| 国产成人精品视频在线| 国产亚洲精品久久久久动| 亚洲第一天堂无码专区| 亚洲天堂免费视频| 久久精品亚洲94久久精品| 97在线免费视频| 日韩av成人在线观看| www.日韩免费| 久久久久久久久久久久久久久久久久av| 97涩涩爰在线观看亚洲| 国产亚洲精品日韩| 亚洲理论片在线观看| 久久精品国产久精国产思思| 国产精品美女www爽爽爽视频| 国产一区二区av| 亚洲精品av在线播放| 亚洲国产99精品国自产| 久久久久国色av免费观看性色| 亚洲欧美精品一区二区| 亚洲97在线观看| 欧美丝袜美女中出在线| 久久久精品视频成人| 国产亚洲精品综合一区91| 国产精品久久视频| 亚洲精品国产精品久久清纯直播| 成人h猎奇视频网站| 久久久精品视频在线观看| 97视频在线观看播放| 亚洲xxxxx电影| 精品国产91久久久| 亚洲欧洲免费视频| 亚洲国产高清高潮精品美女| 亚洲白虎美女被爆操| 亚洲最大激情中文字幕| 亚洲欧洲中文天堂| 亚洲欧美另类中文字幕| 亚洲无av在线中文字幕| 亚洲一区二区日本| 欧美在线中文字幕| 91精品久久久久久久久不口人| 91久久久国产精品| 黑人巨大精品欧美一区二区免费| 国产精品狠色婷| 久久久久久久久国产精品| 亚洲国产欧美久久| 欧美黑人国产人伦爽爽爽| 高清亚洲成在人网站天堂| 欧美日韩国产精品一区二区不卡中文| 日韩高清欧美高清| 国产亚洲精品日韩| 92版电视剧仙鹤神针在线观看| 国产精品久久97| 91九色视频导航| 中文字幕在线日韩| 97香蕉久久超级碰碰高清版| 久久精品国产视频| 久久久之久亚州精品露出| 人人爽久久涩噜噜噜网站| www日韩欧美| 欧美天天综合色影久久精品| 欧美精品免费在线观看| 精品国产一区久久久| 国产精品久久久久久亚洲影视| 国产一区红桃视频| 欧美另类极品videosbestfree| 亚洲精品久久久久久久久久久久| 欧美成在线观看| 久久精品99久久久香蕉| 亚洲精品永久免费精品| 欧美电影免费观看高清| 亚洲一区二区久久久| 91av视频在线播放| 欧美在线视频免费观看| 中文字幕日韩av综合精品| 亚洲xxxx在线| 欧美日韩精品在线视频| 57pao国产精品一区| 国产精品69av| 成人做爰www免费看视频网站| 粗暴蹂躏中文一区二区三区| 久久久久久亚洲精品| 久久久国产影院| 亚洲精品久久久久久下一站| 欧美国产视频一区二区| 午夜精品久久久久久久99热浪潮| 中文字幕9999| 国产精品久久国产精品99gif| 国产一区二区日韩| 欧美性资源免费| 亚洲成人av资源网| 日韩不卡中文字幕| 久久夜色精品亚洲噜噜国产mv| 欧美一级片久久久久久久| 亚洲美女精品成人在线视频| 黑人巨大精品欧美一区免费视频| 国产精品国内视频| 日韩在线观看免费高清| 亚洲色图五月天| 亚洲成人激情在线| 2021久久精品国产99国产精品| 欧美成人亚洲成人日韩成人| 亚洲人成亚洲人成在线观看| 国产精品99久久久久久久久久久久| 久久久久久国产精品美女| 久久久久久久久久久网站| 国产日韩精品一区二区| xvideos亚洲| 欧美丰满少妇xxxx| 国产精品免费网站| 国产精品自产拍在线观看| 国产精品欧美激情| 日韩欧美中文字幕在线观看| 国产精品麻豆va在线播放| 日韩中文字幕在线精品| 日韩精品999| xvideos国产精品| 亚洲国产一区二区三区在线观看| 亚洲精品欧美日韩专区| 粉嫩老牛aⅴ一区二区三区| 8090成年在线看片午夜| 国产精品美女网站| 色婷婷av一区二区三区在线观看| 国产日韩精品在线| 国产成人高潮免费观看精品| 北条麻妃一区二区在线观看| 国产精品久久久久久久久久久新郎| 国产精品久久久久久久久免费看| 国产丝袜一区二区三区免费视频| 4388成人网| 国产精自产拍久久久久久| 欧洲成人免费aa| 亚洲精品国产美女| 久久久久久久久久av| 国产精品中文在线| 久久这里只有精品99| 庆余年2免费日韩剧观看大牛| 日韩精品一区二区视频| 欧美xxxx做受欧美| 亚洲国产成人精品女人久久久| 国产脚交av在线一区二区| 国产主播在线一区| 国产精品久久不能| 欧美亚洲成人网| 欧美日韩国产丝袜美女| 欧美国产日韩一区二区在线观看| 欧美性xxxx极品hd欧美风情| 国产精品久久久久久久久久小说| 亚洲xxxx18| 欧美性高跟鞋xxxxhd| 亚洲成人久久一区| 欧美成人午夜影院|