• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            萬星星@豌豆莢 歡迎加入我們
            一個吃軟飯的男人!!!!!我只想寫程序####
            微博:http://weibo.com/wanlianwen
            posts - 172,  comments - 1253,  trackbacks - 0

            學習 COM 的時候,一直強調 COM 的位置透明,但是始終感覺不到透明,組件都是本機注冊的。知道分布式 COM 其實就是 DCOM 可以實現遠程調用組件,但是一直懶于看,遲遲沒有很好理解。眼看著分布式軟件設計這么流行, .NET 、 J2EE 大行其道,橫下心先把 DCOM 拿下。至于 DCOM 好處我不多說,上網 google 一下,最大的缺點是配置麻煩,尤其是存在防火墻的時候更麻煩(網上說的,我沒有防火墻,呵呵)。

            簡單介紹?

            從這個圖看看客戶端和服務器端分別需要什么(由于開始沒有理解,客戶端接口查詢老失敗,花費我半天時間)

            客戶端:客戶程序、代理 / 存根

            服務器端:服務器組件、代理 / 存根

            這里可以看出 DOM 是針對 COM 遠程調用( RPC )的實現,封裝了底層通信。有些程序開發就是在使用 Socket DCOM 之間選擇。

            ?

            一個 DCOM 程序實現

            實現一個簡單的功能: DCOM 組件提供一個接口方法獲取歡迎信息,客戶端調用接口獲取信息并顯示。

            創建 DCOM 組件

            打開 VC6 ,首選創建一個 ATL 工程 DComServer

            選擇完成。

            添加一個 ATL 組件,取名 Server ,添加一個接口方法:

            實現方法:

            STDMETHODIMP?CServer::GetInfo(BSTR? * pbstrInfo)
            {
            ???????
            // ?TODO:?Add?your?implementation?code?here
            ??????? if (pbstrInfo)
            ???????
            {
            ??????????????
            * pbstrInfo? = ?SysAllocString(L " 你好,這里是DCOM服務器! " );
            ???????}

            ???????
            return ?S_OK;
            }

            打開Settings,進行工程設置:

            編譯可以發現項目目錄下面生成了 DComServerps.dll ,這個就是代理存根,需要在客戶和服務器注冊。

            創建客戶端調用(一個基于對話框的 MFC 程序) (記的要初始化 COM 庫)

            實現連接和獲取消息按鈕事件:

            void ?CDComClientDlg::OnButtonConnect()?
            {
            ????
            // ?TODO:?Add?your?control?notification?handler?code?here
            ????COSERVERINFO????serverInfo;
            ????MULTI_QI????????multiQi????????
            = ? { & IID_IServer,?NULL,?NOERROR} ;
            ????HRESULT????????????hr????????????
            = ?NOERROR;
            ????UpdateData(TRUE);
            ????
            // ?如果已經連接上
            ???? if (m_pIServer)
            ????
            {
            ????????m_pIServer
            -> Release();
            ????????m_pIServer?
            = ?NULL;
            ????}

            ????ZeroMemory(
            & serverInfo,? sizeof (COSERVERINFO));
            ????serverInfo.pwszName?
            = ?m_strServer.AllocSysString();
            ????
            // ?創建遠程組件
            ????hr? = ?CoCreateInstanceEx(
            ????????CLSID_Server,
            ????????NULL,
            ????????CLSCTX_REMOTE_SERVER,
            ????????
            & serverInfo,
            ????????
            1 ,
            ????????
            & multiQi);
            ????
            // ?釋放字符串指針
            ????SysFreeString(serverInfo.pwszName);
            ????
            if (SUCCEEDED(hr))
            ????
            {
            ????????m_pIServer?
            = ?(IServer * )multiQi.pItf;
            ????????AfxMessageBox(_T(
            " 連接成功! " ));
            ????}

            ????
            else
            ????
            {
            ????????AfxMessageBox(_T(
            " 連接失敗! " ));
            ????}

            }


            void ?CDComClientDlg::OnButtonGetmessage()?
            {
            ????
            // ?TODO:?Add?your?control?notification?handler?code?here
            ????BSTR????bstrInfo;
            ????USES_CONVERSION;
            ????
            if (m_pIServer)
            ????
            {
            ????????m_pIServer
            -> GetInfo( & bstrInfo);
            ????????AfxMessageBox(W2A(bstrInfo));
            ????}

            ????
            else
            ????
            {
            ????????AfxMessageBox(_T(
            " 請連接DCOM服務! " ));
            ????}

            }

            ?

            部署客戶端

            這個地方有網上說很麻煩,需要關閉防火墻、需要用戶名一致等,不過我還好,服務器是 Win2k sp4 administrator 帳戶,客戶端是 Win2k3 sp1 administrator 帳戶,一次性就可以創建遠程組件,就是查詢接口時候老是失敗。花了半天時間上網才發現需要注冊代理存根 dll ,就是編譯 DComServer 之前需要設置的。

            拷貝 DComServer 下的 DComServerps.dll DComClient Debug 里面的 DComClient.exe 到客戶端,使用 regsvr32 注冊 DComServerps.dll ,運行 DComClient.exe 。

            連接 DCOM 服務:

            服務器進程自動啟動:

            獲取消息:

            ?
            代碼下載。(里面有說明)

            ?

            posted on 2006-07-10 11:25 萬連文 閱讀(2711) 評論(8)  編輯 收藏 引用 所屬分類: ATL

            FeedBack:
            # re: 分布式設計之DCOM實現
            2006-07-10 18:58 | LOGOS
            汗.你要用RPC的話,用web service比DCOM好多了.  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2006-07-14 00:07 | hi
            兄弟,dcom微軟已經不再進行后期研發維護了,都改com+,Dot Net呢!  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2006-07-14 10:08 | 萬連文
            謝謝以上兩個兄弟對我的友情提示,我知道技術越用越簡單,我覺得自己應該一步一個腳印走過去,很難說.NET技術底層實現思想很大超越COM。  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2007-03-18 10:58 | 小橋
            .NET本身就是個COM  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2007-03-18 10:59 | 小橋
            望交流,QQ:2220911  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2008-07-07 12:03 | liyongcheng
            客戶端傳遞給服務器一個字符串怎么實現。


              回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2008-07-07 23:07 | lwan
            服務器添加一個接口傳遞字符串應該就可以了吧  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2011-12-05 12:53 | lhh
            DCOM 跨機訪問總是出權限問題, CoCreateInstanceEx返回ACCESSDENIED,請問該如何解決?  回復  更多評論
              
            簡歷下載
            聯系我

            <2011年6月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            常用鏈接

            留言簿(66)

            隨筆分類

            隨筆檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产只有精品2020| 久久www免费人成看国产片| 久久婷婷国产剧情内射白浆| 久久久久久伊人高潮影院| 嫩草伊人久久精品少妇AV| 99久久精品免费国产大片| 精品多毛少妇人妻AV免费久久| 色狠狠久久综合网| 久久se精品一区精品二区| 久久乐国产精品亚洲综合| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久久久99精品成人片直播| 99久久er这里只有精品18| 一本色道久久88综合日韩精品| 精品久久久久久中文字幕人妻最新 | 久久精品亚洲中文字幕无码麻豆| 中文字幕成人精品久久不卡| 奇米影视7777久久精品人人爽 | 日韩精品国产自在久久现线拍 | 久久久亚洲欧洲日产国码aⅴ| 久久播电影网| 日本道色综合久久影院| 国产亚洲精品久久久久秋霞| 久久久噜噜噜久久| 一本久久久久久久| 99麻豆久久久国产精品免费| 久久WWW免费人成一看片| 久久强奷乱码老熟女网站| 久久综合九色综合久99| 99久久99这里只有免费的精品| 国产亚洲精品久久久久秋霞| 国产香蕉久久精品综合网| 久久亚洲国产最新网站| 国内精品伊人久久久影院| 人妻中文久久久久| 亚洲国产香蕉人人爽成AV片久久 | 国产aⅴ激情无码久久| 伊人久久大香线蕉av一区| 国内精品综合久久久40p| 一本色道久久综合亚洲精品| 无码久久精品国产亚洲Av影片|