• <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 萬連文 閱讀(2705) 評論(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,請問該如何解決?  回復  更多評論
              
            簡歷下載
            聯系我

            <2009年7月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            留言簿(66)

            隨筆分類

            隨筆檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            99久久国产免费福利| 久久综合国产乱子伦精品免费| 看久久久久久a级毛片| 色99久久久久高潮综合影院| 国产精品一久久香蕉产线看 | 久久AV高潮AV无码AV| 欧洲国产伦久久久久久久| 久久99热这里只有精品国产| 91久久九九无码成人网站| 久久精品国产91久久麻豆自制 | 久久国产精品二国产精品| 91精品观看91久久久久久| 精品视频久久久久| 亚洲午夜无码久久久久小说 | 久久久精品人妻一区二区三区蜜桃| 久久婷婷色综合一区二区| 久久无码AV中文出轨人妻| 97精品伊人久久大香线蕉| 性高湖久久久久久久久| 久久久精品2019免费观看| 久久国产精品久久久| 久久人妻少妇嫩草AV蜜桃| 狠狠色综合网站久久久久久久高清 | 国产∨亚洲V天堂无码久久久| 国产精品久久久久久久久免费| 91久久九九无码成人网站| 伊色综合久久之综合久久| 亚洲av成人无码久久精品| 久久―日本道色综合久久| 四虎亚洲国产成人久久精品| 久久天天躁狠狠躁夜夜2020一| 久久人妻少妇嫩草AV无码专区| 国产成人久久久精品二区三区| 日韩久久久久中文字幕人妻| 久久综合香蕉国产蜜臀AV| 一级做a爰片久久毛片16| 伊人情人综合成人久久网小说| 久久99国产精品久久| 久久久久免费精品国产| 99久久成人18免费网站| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 |