锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍚屾牱錛屽湪浠嬬粛MapGuide 鏈嶅姟鍣ㄥ浣曞鐞嗘灇涓捐祫婧愭搷浣滀箣鍓嶏紝璁╂垜浠鍏堟潵鐪嬬湅MapGuide 鏈嶅姟鍣ㄧ敤浜庡鐞嗘湇鍔¤姹傚拰鎿嶄綔鐨勭被錛屽浘19鈥?鏄劇ず鏈嶅姟璇鋒眰澶勭悊鍣ㄧ被鐨勭被鍥撅紝鍥?9鈥?0鏄劇ず浜?jiǎn)鎿嶄綔澶勭悊鍣ňc葷殑綾誨浘銆?/p>
鍥?span class="Apple-converted-space">聽(tīng)19鈥?1 鎿嶄綔澶勭悊鍣ㄧ被鐨勭被鍥?/p>
MapGuide鎻愪緵浜?jiǎn)璧勬簮鏈嶅姟銆佽绱犳湇鍔$瓑澶氱鏈嶅姟錛屾瘡縐嶆湇鍔″寘鍚簡(jiǎn)澶ч噺鎿嶄綔銆侻apGuide涓烘瘡縐嶆湇鍔℃彁渚涗簡(jiǎn)涓涓湇鍔¤姹傚鐞嗗櫒綾伙紝鐢ㄤ簬澶勭悊榪欎簺鏈嶅姟鎵鎻愪緵鐨勬搷浣滐紝渚嬪MgResourceServiceHandler銆丮gFeatureServiceHanlder絳夈傝繖浜涚被閮界戶(hù)鎵胯嚜IMgServiceHandler錛屽茍涓斿疄鐜頒簡(jiǎn)鏂規(guī)硶IMgServiceHandler::ProcessOperation(...)銆侻apGuide浣跨敤宸ュ巶綾籑gServiceHanlderFactory鏉ュ垱寤轟竴涓湇鍔¤姹傚鐞嗗櫒綾葷殑瀹炰緥錛岀粰瀹氫竴涓湇鍔D錛岃皟鐢ㄦ柟娉昅gServiceHandlerFactory::GetHandler(...)鍙互鍒涘緩瀵瑰簲鐨勬湇鍔¤姹傚鐞嗗櫒綾葷殑瀹炰緥銆?/p>
瀵逛簬鏈嶅姟涓殑姣忕鎿嶄綔錛孧apGuide涔熸彁渚涗簡(jiǎn)鐩稿簲鐨勬搷浣滃鐞嗗櫒綾匯備粠鍥?9鈥?0鍙互鐪嬪埌錛屾搷浣滃鐞嗗櫒綾誨垎涓哄洓涓眰嬈★紝鏈楂樹(shù)竴灞傛槸綾籌MgOperationHandler錛屽畠鏄墍鏈夋搷浣滃鐞嗙被鐨勫熀綾伙紝絎簩灞傛槸綾籑gServiceOperation錛岀涓夊眰鏄被MgXXXOperation錛屸淴XX鈥濅唬琛ㄦ湇鍔″悕縐幫紝鍦ㄨ繖涓灞傛瘡縐嶇被鍨嬬殑鏈嶅姟閮芥湁涓涓搴旂殑綾伙紝渚嬪MgFeatureOperation銆丮gResourceOperation絳夛紝絎洓灞備負(fù)鐪熸璐熻矗宸ヤ綔鐨勬搷浣滃鐞嗗櫒綾伙紝姣忕鏈嶅姟涓殑姣忎釜鎿嶄綔閮芥湁涓涓搴旂殑鎿嶄綔澶勭悊鍣ㄧ被錛屾煇縐嶆湇鍔′腑鎿嶄綔澶勭悊鍣ㄧ被閮界戶(hù)鎵胯嚜鍚屼竴涓埗綾伙紝渚嬪MgEnumerateResource銆丮gSetResource閮界戶(hù)鎵胯嚜MgResourceOperation銆?/p>
鎺ヤ笅鏉ヨ鎴戜滑鐪嬬湅MapGuide鏈嶅姟鍣ㄥ浣曞鐞嗘灇涓捐祫婧愭搷浣滐紝榪欎釜鎿嶄綔嫻佺▼鐨勬椂搴忓浘濡傚浘 19鈥?1鎵紺恒?/p>
鍥?span class="Apple-converted-space">聽(tīng)19鈥?2 MapGuide鏈嶅姟鍣ㄥ鐞嗘灇涓捐祫婧愭搷浣滅殑鏃跺簭鍥?/p>
1錛?鍦ㄧ嚎紼嬫睜涓壘涓涓┖闂茬殑綰跨▼鎵ц鎿嶄綔 MapGuide鏈嶅姟鍣ㄤ嬌鐢ㄤ簡(jiǎn)澶氱嚎紼嬪拰綰跨▼姹犵殑鎶鏈潵鎻愰珮鎿嶄綔澶勭悊鍜屽搷搴旇姹傜殑鎬ц兘銆傚湪MapGuide鏈嶅姟鍣ㄥ惎鍔ㄦ椂錛屼細(xì)鍒涘緩涓涓搷浣滆姹傞槦鍒楀拰涓涓敤浜庡鐞嗘搷浣滆姹傜殑綰跨▼姹犮傚綋涓涓搷浣滆姹傝繘鍏ユ搷浣滈槦鍒楋紝MapGuide鏈嶅姟鍣ㄤ細(xì)鍦ㄧ嚎紼嬫睜涓壘涓涓┖闂茬殑綰跨▼鎵ц鎿嶄綔銆傚鏋滄病鏈夌┖闂茬殑綰跨▼錛岄偅涔堣繖涓搷浣滆姹備細(xì)澶勪簬絳夊緟鐘舵侊紝鐩村埌綰跨▼姹犱腑鏈変簡(jiǎn)絀洪棽鐨勭嚎紼嬨?/p>
棣栧厛錛岃鎴戜滑鏌ョ湅涓涓嬫湇鍔″櫒鐨勫叆鍙e嚱鏁扮殑婧愪唬鐮侊紝鐪嬬湅鏈嶅姟鍣ㄦ槸濡備綍鍚姩鐨勩侻apGuide鏈嶅姟鍣ㄥ彲浠ュ儚鏅氱殑搴旂敤紼嬪簭涓鏍瘋繍琛岋紝榪樺彲浠ュ湪Windows鎿嶄綔緋葷粺鍙互榪愯涓篧indows鏈嶅姟錛屽湪Linux鎿嶄綔緋葷粺榪愯涓哄畧鎶よ繘紼嬶紝涓嬮潰鐨勪唬鐮佷腑鍙繚鐣欎簡(jiǎn)榪愯涓烘櫘閫氬簲鐢ㄧ▼搴忛儴鍒嗙殑浠g爜銆?/p>
typedef ACE_Singleton SERVER; int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { int nResult = 0; ...... // 鍒濆鍖朅CE鏈嶅姟 ACE::init(); ...... // 鏍規(guī)嵁鍛戒護(hù)琛屽弬鏁版墽琛屽搷搴旂殑鎿嶄綔 if((ACE_OS::strcasecmp(parameter, ACE_TEXT("?")) == 0) || (ACE_OS::strcasecmp(parameter, MG_WCHAR_TO_TCHAR(MgResources::ServerCmdHelp)) == 0)) { // 鏄劇ず鏈嶅姟鍣ㄥ懡浠よ鍙傛暟 ShowCommandlineHelp(); ...... } else if((ACE_OS::strcasecmp(parameter, MG_WCHAR_TO_TCHAR(MgResources::ServerCmdRun)) == 0) || (ACE_OS::strcasecmp(parameter, MG_WCHAR_TO_TCHAR(MgResources::ServerCmdInteractive)) == 0)) { ACE_OS::printf(MG_WCHAR_TO_CHAR(MgResources::ServerCmdRunInfo)); ...... // 浠ユ櫘閫氬簲鐢ㄧ▼搴忕殑鏂瑰紡榪愯鏈嶅姟鍣?/p>
nResult = SERVER::instance()->init(argc, argv); if(0 == nResult) { // 鍚姩鏈嶅姟 nResult = SERVER::instance()->open(); // 緇堟鏈嶅姟 SERVER::instance()->fini(); } ...... } ...... // 緇堟ACE鏈嶅姟 ACE::fini(); return nResult; }
鍦ㄤ笂闈㈢殑浠g爜涓紝鎴戜滑鍙互鐪嬪埌澶ч噺浠モ淎CE鈥濅負(fù)鍓嶇紑鐨勭被錛岃繖浜涚被鏄疉CE鑷傞厤閫氫俊鐜錛圓daptive Communication Environment錛夊伐鍏峰寘涓殑綾匯侫CE鏄竴涓紑婧愮殑宸ュ叿鍖咃紝瀹冨疄鐜頒簡(jiǎn)璁稿鐢ㄤ簬騫跺彂閫氫俊杞歡鐨勬牳蹇?jī)妯″紡銆侫CE鐨勭洰鏍囩敤鎴鋒槸鍦║NIX鍜學(xué)in32騫沖彴涓婂紑鍙戦珮鎬ц兘閫氫俊鏈嶅姟鍜屽簲鐢ㄧ殑寮鍙戣呫侫CE綆鍖栦簡(jiǎn)浣跨敤榪涚▼闂撮氫俊銆佷簨浠跺璺垎紱匯佹樉寮忓姩鎬侀摼鎺ュ拰騫跺彂鐨凮O緗戠粶搴旂敤鍜屾湇鍔$殑寮鍙戙侫CE鎻愪緵浜?jiǎn)涓緇勪赴瀵岀殑鍙鐢–++ Wrapper Facade錛堝寘瑁呭瑙傦級(jí)鍜屾鏋剁粍浠訛紝鍙法瓚婂縐嶅鉤鍙板畬鎴愰氱敤鐨勯氫俊杞歡浠誨姟錛屽叾涓寘鎷細(xì)浜嬩歡澶氳礬鍒嗙鍜屼簨浠跺鐞嗗櫒鍒嗘淳銆佷俊鍙峰鐞嗐佹湇鍔″垵濮嬪寲銆佽繘紼嬮棿閫氫俊銆佸叡浜唴瀛樼鐞嗐佹秷鎭礬鐢便佸垎甯冨紡鏈嶅姟鍔ㄦ侊紙閲嶏級(jí)閰嶇疆銆佸茍鍙戞墽琛屽拰鍚屾絳夈?/p>
綾籑gServer緇ф壙鑷狝EC宸ュ叿鍖呬腑鐨勭被ACE_NT_Service鎴朅CE_Service_Object錛屽搴斾簬鏈嶅姟鍣ㄧ殑涓葷嚎紼嬶紝鍥?9鈥?2鏄劇ず浜?jiǎn)鏈嶅姟鍣ㄤ溉澓拷E嬬被鐨勭被鍥俱侻gServer::svc()鏄富綰跨▼鐨勫叆鍙o紝璋冪敤鏂規(guī)硶MgServer::open()浼?xì)鍚姩涓痪U跨▼騫朵笖鎵ц鏂規(guī)硶MgServer::svc()錛岃皟鐢∕gServer::fini()浼?xì)缁堟涓痪U跨▼銆侻apGuide浣跨敤浜?jiǎn)Singleton妯℃澘ACE_Singleton灝哅gServer灝佽涓轟竴涓崟瀹炰緥綾伙紝涓轟簡(jiǎn)鏂逛究浣跨敤MapGuide浣跨敤typedef涓篈CE_Singleton瀹氫箟浜?jiǎn)涓涓埆鍚峉ERVER錛岃皟鐢ㄦ柟娉昐ERVER::instance()鍙互鍒涘緩綾籑gServer鐨勪竴涓疄渚嬨?/p>
鍥?span class="Apple-converted-space">聽(tīng)19鈥?3 鏈嶅姟鍣ㄤ富綰跨▼綾葷殑綾誨浘 MgServer::svc()鏄富綰跨▼鐨勫叆鍙o紝璇ユ柟娉曚細(xì)鍒涘緩涓涓搷浣滆姹傞槦鍒楀拰涓涓敤浜庡鐞嗘搷浣滆姹傜殑綰跨▼姹狅紝瀹冪殑浠g爜濡備笅鎵紺恒備簨瀹炰笂錛岃鏂規(guī)硶榪樺畾涔変簡(jiǎn)鍏跺畠綾誨瀷鐨勯槦鍒楀拰綰跨▼姹狅紝涓轟簡(jiǎn)渚夸簬鐞嗚В鎴戜滑鐪佺暐鎺変簡(jiǎn)榪欎簺浠g爜銆?/p>
int MgServer::svc() { MgServerManager* pServerManager = MgServerManager::GetInstance(); // 鍒涘緩綰跨▼綆$悊鍣ㄥ拰鎿嶄綔綰跨▼ ACE_Thread_Manager threadManager; MgOperationThread clientThreads(threadManager, pServerManager->GetClientThreads()); pServerManager->SetClientMessageQueue(clientThreads.msg_queue_); MgClientAcceptor clientAcceptor(clientAddr, ACE_Reactor::instance(), clientThreads.msg_queue_); nResult = clientAcceptor.Initialize(); if(nResult == 0) { // 鍚姩綰跨▼姹?/p>
nResult = clientThreads.Activate(); if(nResult == 0) { // 閫氱煡鎿嶄綔綰跨▼鍋滄鎵ц ACE_Message_Block* mb = new ACE_Message_Block(4); if(mb) { mb->msg_type(ACE_Message_Block::MB_STOP); clientThreads.putq(mb); } // 鍋滄鎿嶄綔綰跨▼ clientThreads.close(); // 絳夊緟鎵鏈夋搷浣滅嚎紼嬫墽琛屽畬鎴?/p>
threadManager.wait(); threadManager.close(); } } return nResult; }
涓婇潰鐨勪唬鐮佷腑鍒涘緩涓涓被MgOperationThread鐨勫疄渚嬶紝璇ュ璞″垱寤轟簡(jiǎn)涓涓嚎紼嬫睜錛岀淮鎶や簡(jiǎn)涓涓搷浣滆姹傞槦鍒椼傜被MgOperationThread 緇ф壙鑷狝CE宸ュ叿鍖呬腑鐨勬ā鏉跨被AEC_Task錛屽搴斾簬鎿嶄綔綰跨▼錛屽浘19鈥?3鏄劇ず浜?jiǎn)鎿嶄綔绾拷E嬬被鐨勭被鍥俱侫CE_Task灝佽浜?jiǎn)鋼Q鍔★紝姣忎釜浠誨姟閮藉惈鏈変竴鎴栧涓嚎紼嬶紝浠ュ強(qiáng)涓涓簳灞傛秷鎭槦鍒椼傛柟娉旳CE_Task::svc()鏄嚎紼嬬殑鍚姩鍏ュ彛錛岃皟鐢ㄦ柟娉旳CE_Task::open()鐢ㄤ簬鍒濆鍖栦換鍔★紝璋冪敤鏂規(guī)硶ACE_Task::close()鐢ㄤ簬緇堟浠誨姟錛岃皟鐢ㄦ柟娉旳CE_Task::activate()鐢ㄤ簬鍚姩綰跨▼錛岃皟鐢ㄦ柟娉旳CE_Task::putq()鏀劇疆娑堟伅鍒頒換鍔$殑娑堟伅闃熷垪涓紝璋冪敤鏂規(guī)硶ACE_Task::getq()浠庝換鍔$殑娑堟伅闃熷垪涓彇鍑烘秷鎭?/p>
鍥?span class="Apple-converted-space">聽(tīng)19鈥?4 鎿嶄綔綰跨▼綾葷殑綾誨浘 鏂規(guī)硶MgOperationThread::svc()鏄搷浣滅嚎紼嬬殑鍏ュ彛錛屽畠鐨勪唬鐮佸涓嬫墍紺恒?/p>
int MgOperationThread::svc() { INT32 nResult = 0; while (m_bActive) { ACE_Message_Block* messageBlock = NULL; // 浠庢秷鎭槦鍒椾腑鍙栧嚭娑堟伅 while (getq(messageBlock) == -1) { ...... } if(messageBlock->msg_type() == ACE_Message_Block::MB_STOP) { m_bActive = false; ACE_Message_Block* mb = new ACE_Message_Block(4); if(mb) { mb->msg_type(ACE_Message_Block::MB_STOP); putq(mb); } } else if(messageBlock->msg_type() ==聽(tīng)ACE_Message_Block::MB_DATA) { MgServerStreamData* pData = dynamic_cast(messageBlock->data_block()); IMgServiceHandler::MgProcessStatus stat =聽(tīng)ProcessMessage(messageBlock); ...... } } return nResult; } IMgServiceHandler::MgProcessStatus MgOperationThread::ProcessMessage(ACE_Message_Block* pMB) { IMgServiceHandler::MgProcessStatus stat = IMgServiceHandler::mpsError; MgServerStreamData* pData = NULL; pData = (MgServerStreamData*) pMB->data_block(); ...... MgStreamParser::ParseStreamHeader(pData); MgStreamParser::ParseDataHeader(pData); MgPacketParser::MgPacketHeader pt = MgPacketParser::GetPacketHeader(pData); switch ( pt ) { case (MgPacketParser::mphOperation):
stat = ProcessOperation( pData );
break; ...... } return stat; }
浠庝笂闈㈢殑浠g爜鍙互鐪嬪埌錛屾柟娉昅gOperationThread::svc()浼?xì)璋冪敤鏂规硶getq(鈥?寰幆璁塊棶娑堟伅闃熷垪錛屽彇鍑虹瓑寰呭鐞嗙殑娑堟伅銆傚鏋滄槸鏁版嵁綾誨瀷鐨勬秷鎭紝閭d箞璋冪敤鏂規(guī)硶MgOperationThread:: ProcessMessage(...)澶勭悊榪欎釜娑堟伅銆傛柟娉昅gOperationThread::ProcessMessage(...)浼?xì)瑙f瀽杩欎釜娑堟伅鐨勫ご鍜屾暟鎹Q屽鏋滄秷鎭暟鎹腑鍖呭惈浜?jiǎn)涓涓搷浣滆姹傦紝閭d箞璋冪敤鏂規(guī)硶MgOperationThread:: ProcessOperation(鈥?澶勭悊榪欎釜鎿嶄綔璇鋒眰銆?/p>
2錛?澶勭悊鏈嶅姟璇鋒眰 鏂規(guī)硶MgOperationThread::ProcessOperation(鈥? 棣栧厛浼?xì)瑙f瀽娑堟伅鏁版嵁涓殑鏈嶅姟ID銆佹搷浣淚D銆佹搷浣滅殑鐗堟湰鍙風(fēng)瓑淇℃伅錛岀劧鍚庢牴鎹湇鍔D浣跨敤宸ュ巶綾籑gServiceHanlderFactory鏉ュ垱寤轟竴涓湇鍔¤姹傚鐞嗗櫒綾葷殑瀹炰緥錛屾渶鍚庤皟鐢ㄨ繖涓湇鍔¤姹傚鐞嗗櫒綾葷殑鏂規(guī)硶IMgServiceHandler:: ProcessOperation(...)澶勭悊榪欎釜鏈嶅姟璇鋒眰銆?/p>
鏈妭鐨勭ず渚嬩腑瀹㈡埛绔彂閫佺殑鏄竴涓灇涓捐祫婧愮殑鎿嶄綔璇鋒眰錛屾墍浠ュ伐鍘傜被浼?xì)鍒涘晦Z竴涓狹gResourceServiceHandler鐨勫疄渚嬶紝璋冪敤鏂規(guī)硶MgResourceServiceHandler::ProcessOperation(...)澶勭悊榪欎釜鏈嶅姟璇鋒眰銆?/p>
IMgServiceHandler::MgProcessStatus MgOperationThread::ProcessOperation(MgServerStreamData* pData) { IMgServiceHandler::MgProcessStatus stat = IMgServiceHandler::mpsError; MgOperationPacket op; MgStreamHelper* pHelper = NULL; pHelper = pData->GetStreamHelper(); pHelper->GetUINT32(op.m_PacketHeader); pHelper->GetUINT32(op.m_PacketVersion); pHelper->GetUINT32(op.m_ServiceID); pHelper->GetUINT32(op.m_OperationID); pHelper->GetUINT32(op.m_OperationVersion); IMgServiceHandler* pServiceHandler = MgServiceHandlerFactory::Instance()->GetHandler(op.m_ServiceID, pData, op); delete pServiceHandler; pServiceHandler = NULL;
stat = pServiceHandler->ProcessOperation();
return stat; }
3錛?澶勭悊鎿嶄綔璇鋒眰 棣栧厛錛屾柟娉昅gResourceServiceHandler::ProcessOperation(...)浼?xì)鏍规嵁鎿嶄綔璇锋眰鐨処D錛岃皟鐢ㄨ祫婧愭搷浣滃伐鍘傜被鐨勬柟娉昅gResourceOperationFactory::GetOperation(鈥?鍒涘緩鐩稿簲鐨勮祫婧愭湇鍔℃搷浣滅被MgOpEnumerateResources鐨勫疄渚嬨傜劧鍚庯紝璋冪敤MgOpEnumerateResources:: Initialize(...)鍒濆鍖栨灇涓捐祫婧愭搷浣滃鐞嗗櫒錛岃皟鐢ㄦ柟娉昅gServiceManager::RequestService(鈥?鍒涘緩鏈嶅姟鍣ㄨ祫婧愭湇鍔gServerResourceService鐨勫疄渚嬨傛渶鍚庯紝璋冪敤鏂規(guī)硶MgOpEnumerateResources::Execute()澶勭悊鎿嶄綔璇鋒眰錛岃鏂規(guī)硶浼?xì)璋冪敤MgServerResourceService::EnumerateResources(鈥?瀹為檯鎵ц鏋氫婦璧勬簮鐨勫姛鑳姐?/p>
IMgServiceHandler::MgProcessStatus MgResourceServiceHandler::ProcessOperation() { IMgServiceHandler::MgProcessStatus status = IMgServiceHandler::mpsError; auto_ptr handler; MG_TRY() handler.reset(MgResourceOperationFactory::GetOperation( m_packet.m_OperationID, m_packet.m_OperationVersion)); assert(NULL != handler.get()); handler->Initialize(m_data, m_packet); handler->Execute(); status = IMgServiceHandler::mpsDone; MG_CATCH(L"MgResourceServiceHandler.ProcessOperation") if (mgException != NULL && NULL != handler.get()) { status = (handler.get()->HandleException(mgException) ? IMgServiceHandler::mpsDone : IMgServiceHandler::mpsError); } if (IMgServiceHandler::mpsDone != status) { MG_THROW(); } return status; } void MgOpEnumerateResources::Execute() { ...... BeginExecution(); ...... Validate(); Ptr byteReader = m_service->EnumerateResources(resource, depth, type, properties, fromDate, toDate, computeChildren); EndExecution(byteReader); ...... }
鏈妭涓紝鎴戜滑灝嗛氳繃浠嬬粛濡備綍瀹屾垚鏋氫婦璧勬簮鍔熻兘鏉ヤ粙緇峂apGuide Web鎵╁睍鐨勯儴鍒嗘簮浠g爜銆?/p>
鍦ㄦ祻瑙堝櫒绔殑鍦板潃鏍忚緭鍏ョ被浼煎涓嬪瓧絎︿覆錛屽氨浼?xì)鍙戦佷竴涓灇涓捐祫婧愮殑HTTP璇鋒眰銆?/p>
http://hostname/mapGuide/mapagent.fcig?OPERATION=EnumerateResources&VERSION=1.0.0& RESOURCEID=Library:// &TYPE=FeatureSource&DEPTH=3
涓嬮潰鎴戜滑鏉ョ湅鐪婱apGuide Web鎵╁睍濡備綍澶勭悊榪欎釜璇鋒眰銆?/p>
鍦ㄤ粙緇峂apGuide Web鎵╁睍濡備綍澶勭悊鏋氫婦璧勬簮HTTP璇鋒眰涔嬪墠錛岃鎴戜滑棣栧厛鏉ョ湅鐪婱apGuide Web鎵╁睍鐢ㄤ簬澶勭悊HTTP璇鋒眰鍜屽搷搴旂殑綾伙紝榪欎簺綾葷殑綾誨浘濡傚浘19鈥?鎵紺恒?/p>
鍥?19鈥? HTTP璇鋒眰鍜屽搷搴旂被鐨勭被鍥?/p>
綾籑gHttpRequest鍜岀被MgHttpResponse鍒嗗埆鏄HTTP璇鋒眰鍜屽搷搴旂粨鏋滅殑鎶借薄錛岃繖涓や釜綾誨彲浠ョ敤浜庝換浣曠被鍨嬬殑Web搴旂敤鏈嶅姟鍣紝涔熷氨鏄瀹冧滑鐨勪唬鐮佷笉渚濊禆浜庝換浣昗eb搴旂敤鏈嶅姟鍣ˋPI銆傚湪鏂囦歡澶光淺MgDev\Web\src\HttpHandler鈥濅笅鍙互鎵懼埌鎵鏈夊墠緙涓衡淢gHttp鈥濈被鐨勬簮浠g爜銆?/p>
綾籑gHttpRequest鐢ㄤ簬澶勭悊HTTP璇鋒眰錛屽畠鍖呭惈浜?jiǎn)涓涓狧TTP璇鋒眰澶碝gHttpHeader鐨勫疄渚嬨佷竴涓狧TTP璇鋒眰鍙傛暟HttpRequestParam鐨勫疄渚嬪拰涓涓狧TTP璇鋒眰鍏冩暟鎹瓾ttpRequestMetadata鐨勫疄渚嬨傝皟鐢ㄦ柟娉昅gHttpRequest::Execute()浼?xì)灏咹TTP璇鋒眰杞彂緇橫apGuide鏈嶅姟鍣紝褰揗apGuide鏈嶅姟鍣ㄥ鐞嗗畬榪欎釜璇鋒眰錛屽皢璇鋒眰緇撴灉榪斿洖緇橶eb鎵╁睍涔嬪悗錛岃繖涓柟娉曚細(xì)榪斿洖涓涓狹gHttpResponse瀵硅薄錛屽畠琛ㄧずHTTP璇鋒眰鐨勫搷搴旂粨鏋溿?/p>
鎺ヤ笅鏉ヨ鎴戜滑鐪嬬湅MapGuide Web鎵╁睍濡備綍澶勭悊鏋氫婦璧勬簮鐨凥TTP璇鋒眰銆傚ぇ澶氭暟MapGuide鐢ㄦ埛閮芥槸浣跨敤IIS浣滀負(fù)Web搴旂敤鏈嶅姟鍣紝騫朵笖浣跨敤Web鎵╁睍妯″潡isapi_MapAgent.dll鏉ュ鐞咹TTP璇鋒眰錛屾墍浠ユ湰鑺備晶閲嶄簬isapi_MapAgent.dll妯″潡澶勭悊HTTP璇鋒眰鐨勬祦紼嬶紝榪欎釜澶勭悊嫻佺▼鐨勬椂搴忓浘濡傚浘19鈥?鎵紺恒?/p>
]]>
1錛?鍔犺澆Web搴旂敤鏈嶅姟鍣ㄦ墿灞曟ā鍧?/p>
濡傛灉浣跨敤鐨勬槸IIS Web搴旂敤鏈嶅姟錛岄偅涔堝湪鎺ユ敹鍒板悗緙涓衡渇cgi鈥濈殑HTTP璇鋒眰鍚庯紝IIS浼?xì)鍔犺浇Web搴旂敤鏈嶅姟鍣ㄦ墿灞曟ā鍧梚sapi_MapAgent.dll鎴朚apAgent.exe銆傚叾涓紝isapi_MapAgent.dll鍩轟簬IIS API錛屽叿鏈夋洿濂界殑鎬ц兘錛汳apAgent.exe鍩轟簬CGI鎶鏈紝鎬ц兘瑕佺◢寰樊涓浜涖傚鏋滀嬌鐢ㄧ殑鏄疉pache Web搴旂敤鏈嶅姟鍣紝閭d箞鍦╓indows騫沖彴涓夾pache浼?xì)鍔犺浇Web搴旂敤鏈嶅姟鍣ㄦ墿灞曟ā鍧桵apAgent.exe錛屽湪Linux騫沖彴涓婁細(xì)鍔犺澆妯″潡mod_mgmapagent.so銆?/p>
榪欎笁涓猈eb鏈嶅姟鍣ㄦ墿灞曟ā鍧楀疄鐜頒簡(jiǎn)綾諱技鐨勫姛鑳斤紝瀹冧滑鐨勬簮浠g爜浣嶇疆濡傝〃19鈥?鎵紺恒?/p>
鏈嶅姟鍣ㄦ墿灞曟ā鍧?/strong> |
婧愪唬鐮佷綅緗?/strong> |
isapi_MapAgent.dll |
\Web\src\IsapiAgent |
MapAgent.exe |
\Web\src\CgiAgent |
mod_mgmapagent.so |
\Web\src\ApacheAgent |
琛?span class="Apple-converted-space">聽(tīng)19鈥? Web鏈嶅姟鍣ㄦ墿灞曟ā鍧楃殑婧愪唬鐮佷綅緗?/p>
浠庡浘19鈥?涓彲浠ョ湅鍒拌繖涓変釜Web鏈嶅姟鍣ㄦ墿灞曟ā鍧楁彁渚涗簡(jiǎn)綾諱技鐨勭被錛岃繖浜涚被鎻愪緵浜?jiǎn)鐩稿悓鐨勬帴鍙eQ岀被XXXPostParser鐢ㄤ簬瑙f瀽HTTP璇鋒眰涓紶鍏ョ殑鍙傛暟鍙?qiáng)鍙傛暟鍊鹼紝綾?strong>XXXResponseHandler鐢ㄤ簬灝咹TTP璇鋒眰鐨勫搷搴旂粨鏋滃彂閫佺粰瀹㈡埛绔傚叾涓紝鈥?strong>XXX鈥濊〃紺衡淐gi鈥濄佲淚sapi鈥濇垨鈥淎pache鈥濄?/p>
鍥?span class="Apple-converted-space">聽(tīng)19鈥? Web鎵╁睍鐨勮姹傚鐞嗘ā鍧?/p>
瀵逛簬妯″潡isapi_MapAgent.dll錛屾瘡涓渇cgi鈥濈被鍨嬬殑HTTP璇鋒眰浼?xì)璋冪敤姝ゆā鍧椾腑鐨勬栆?guī)硶HttpExtensionProc錛岃繖涓柟娉曠殑浠g爜濡備笅鎵紺猴紝涓轟簡(jiǎn)渚夸簬鐞嗚В鎴戜滑鍙繚鐣欎簡(jiǎn)涓浜涙牳蹇?jī)浠g爜銆?/p>
DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pECB) { Initialize(pECB); // 璋冪敤GetServerVariable璇誨彇璇稿鏈嶅姟鍣ㄥ悕縐般佺鍙e彿絳夋湇鍔″櫒鍙橀噺淇℃伅 ...... // 鍒涘緩MgHttpRequest鐨勫疄渚嬶紝鐢ㄤ簬澶勭悊HTTP璇鋒眰 Ptr request = new MgHttpRequest(wUrl); // 瑙f瀽HTTP璇鋒眰涓殑鍙傛暟錛屽茍涓斿皢榪欎簺鍙傛暟緗叆MgHttpRequest瀵硅薄涓?/p> Ptr params = request->GetRequestParam(); ...... IsapiPostParser postParser(pECB); postParser.Parse(params); ...... // 鍒涘緩IsapiResponseHandler鐨勫疄渚嬶紝鐢ㄤ簬灝嗗搷搴旇姹傝繑鍥炵粰瀹㈡埛绔?/p> IsapiResponseHandler responseHandler(pECB); ...... // 灝咹TTP璇鋒眰杞彂緇橫apGuide鏈嶅姟鍣紝褰揗apGuide鏈嶅姟鍣ㄥ鐞嗗畬榪欎釜璇鋒眰錛?/p> // 灝嗚姹傜粨鏋滆繑鍥炵粰Web鎵╁睍涔嬪悗錛岃繖涓柟娉曚細(xì)榪斿洖涓涓狹gHttpResponse瀵硅薄錛?/p> // 瀹冭〃紺篐TTP璇鋒眰鐨勫搷搴旂粨鏋溿?/p> Ptr response = request->Execute(); // 灝嗗搷搴旂粨鏋滆繑鍥炵粰瀹㈡埛绔?/p> responseHandler.SendResponse(response); ...... } |
2錛?鍒涘緩MgHttpRequest鐨勫疄渚嬶紝鐢ㄤ簬澶勭悊HTTP璇鋒眰
鍦ㄥ姞杞絎eb搴旂敤鏈嶅姟鍣ㄦ墿灞曟ā鍧楀悗錛岄渶瑕佸垱寤轟竴涓狹gHttpRequest鐨勫疄渚嬬敤浜庡鐞咹TTP璇鋒眰銆傜被MgHttpRequest騫朵笉鍏寵仈涓庝換浣曠被鍨嬬殑Web搴旂敤鏈嶅姟鍣紝鎵浠eb搴旂敤鏈嶅姟鍣ㄦ墿灞曟ā鍧椾細(xì)浣跨敤綾?strong>XXXPostParser瑙f瀽HTTP璇鋒眰涓紶鍏ョ殑鍙傛暟鍙?qiáng)鍙傛暟鍊鹼紝灝嗚繖浜涘弬鏁拌緗埌MgHttpRequest瀵硅薄涓?/p>
3錛?璋冪敤鏂規(guī)硶MgHttpRequest::Execute()澶勭悊HTTP璇鋒眰
鏂規(guī)硶MgHttpRequest::Execute()鐨勬簮浠g爜濡備笅鎵紺恒備負(fù)浜?jiǎn)渚夸簬鐞嗚В锛屾垜浠悓鏍峰彧淇濈暀浜?jiǎn)涓浜涙牳蹇?jī)浠g爜銆?/p>
MgHttpResponse* MgHttpRequest::Execute() { Ptr hResponse; Ptr result; // 鍒涘緩MgHttpResponse瀵硅薄錛岀敤浜庤繑鍥濰TTP璇鋒眰鍝嶅簲緇撴灉 hResponse = new MgHttpResponse(); result = hResponse->GetResult(); // 鑾峰緱HTTP璇鋒眰涓弬鏁扳淥PERATION鈥濈殑鍊?/p> STRING sParamValue = m_requestParam->GetParameterValue(MgHttpResourceStrings::reqOperation); ...... // 鏍規(guī)嵁鍙傛暟鈥淥PERATION鈥濈殑鍊煎彇寰楀搴旀搷浣滅殑璇鋒眰鍝嶅簲澶勭悊鍣?/p> Ptr rrHandler = CreateRequestResponseHandler(sParamValue, result); ....... // 澶勭悊HTTP璇鋒眰 if(rrHandler != NULL) rrHandler->Execute(*hResponse); ...... // 榪斿洖鍝嶅簲緇撴灉 return SAFE_ADDREF((MgHttpResponse*)hResponse); } |
姣忎釜HTTP璇鋒眰涓寘鍚竴涓弬鏁扳淥PERATION鈥濓紝瀹冪敤浜庝唬琛ㄦ搷浣滅殑綾誨瀷銆傚浜庝笉鍚岀殑鎿嶄綔錛孧apGuide瀹氫箟浜?jiǎn)涓嶅悓鐨勮h眰鍝嶅簲澶勭悊鍣ㄧ被錛岃繖涓被浼?xì)璋冪敤MapGuide鏈嶅姟涓搴旂殑鏂規(guī)硶澶勭悊榪欎釜鎿嶄綔錛岃繖浜涜姹傚搷搴斿鐞嗗櫒綾葷殑綾誨浘濡傚浘19鈥?鎵紺恒備粠鍥?9鈥?鍙互鐪嬪埌錛屾墍鏈夎姹傚搷搴斿鐞嗗櫒綾婚兘緇ф壙鑷被MgHttpRequestResponseHandler錛屾瘡涓縐嶆搷浣滈兘鏈変竴涓搴旂殑瀛愮被錛屼緥濡傛灇涓捐祫婧愭搷浣滀嬌鐢ㄤ簡(jiǎn)綾籑gHttpEnumerateResources錛屾弿榪版ā寮忔搷浣滀嬌鐢ㄤ簡(jiǎn)綾籑gHttpDescribeSchema銆?/p>
鍥?span class="Apple-converted-space">聽(tīng)19鈥? HTTP璇鋒眰鍝嶅簲澶勭悊鍣ㄧ殑綾誨浘
MapGuide瀹氫箟浜?jiǎn)涓涓叏灞map瀵硅薄鐢ㄤ簬瀛樻斁姣忕鎿嶄綔瀵瑰簲鐨勮姹傚搷搴斿鐞嗗櫒綾誨璞★紝瀹冪殑閿槸鎿嶄綔鐨勫悕縐幫紝鍊兼槸璇鋒眰鍝嶅簲澶勭悊鍣ㄧ被瀵硅薄銆?/p>
// 瀹氫箟涓涓叏灞map瀵硅薄錛岀敤浜庡瓨鏀炬瘡縐嶆搷浣滃搴旂殑璇鋒眰鍝嶅簲澶勭悊鍣ㄧ被瀵硅薄 static map httpClassCreators; bool InitializeStaticData() { httpClassCreators[MgHttpResourceStrings::opGetMap] = MgHttpGetMap::CreateObject; httpClassCreators[MgHttpResourceStrings::opGetMapUpdate] = MgHttpGetMapUpdate::CreateObject; httpClassCreators[MgHttpResourceStrings::opGetDrawing] = MgHttpGetDrawing::CreateObject; ...... httpClassCreators[MgHttpResourceStrings::opDescribeDrawing] = MgHttpDescribeDrawing::CreateObject; httpClassCreators[MgHttpResourceStrings::opEnumerateResources] = MgHttpEnumerateResources::CreateObject; ...... } |
璋冪敤鏂規(guī)硶MgHttpRequest::CreateRequestResponseHandler(...)鍙互鏍規(guī)嵁鎿嶄綔鐨勫悕縐拌幏寰楀搴旂殑璇鋒眰鍝嶅簲澶勭悊鍣ㄧ被瀵硅薄銆傚浜庢灇涓捐祫婧愭搷浣滐紝瀹冧細(xì)榪斿洖涓涓被MgHttpEnumerateResources鐨勫璞°?/p>
璋冪敤榪欎簺璇鋒眰鍝嶅簲澶勭悊鍣ㄧ被鐨凟xecute(鈥?鏂規(guī)硶錛屼細(xì)鍒涘緩涓涓唬鐞嗘湇鍔$被瀵硅薄錛岀劧鍚庤皟鐢ㄤ唬鐞嗘湇鍔′腑瀵瑰簲鐨勬柟娉曘備負(fù)浠涔堣鍒涘緩鐨勬槸涓涓唬鐞嗘湇鍔$被瀵硅薄鍛紵鎴戞兂鐪嬪畬鍥?9鈥?涔嬪悗澶у浼?xì)鏈夋墍鏄庣櫧銆備粠鍥?9鈥?涓彲浠ョ湅鍒幫紝鎵鏈夌殑MapGuide鏈嶅姟鏈変袱涓瓙綾伙紝涓涓槸鍚嶇О涓篗gProxyXXXService鐨勪唬鐞嗘湇鍔$被錛屽畠鏄疢apGuide Web鎵╁睍绔殑涓涓被錛屽彟涓涓槸鍚嶇О涓篗gServerXXXService鐨勬湇鍔″櫒鏈嶅姟綾伙紝瀹冩槸MapGuide鏈嶅姟鍣ㄧ鐨勪竴涓被銆侻gProxyXXXService鏈緇堜細(xì)灝嗘湇鍔¤姹傝漿鍙戠粰鏈嶅姟鍣ㄧ綾籑gServerXXXService錛屾墍浠ヨ鐪熸澶勭悊鏈嶅姟璇鋒眰鐨勭被鏄疢gServerXXXService錛孧gProxyXXXService浠呬粎璧峰埌涓涓漿鍙戠殑浣滅敤錛岃繖涔熷氨鏄負(fù)浠涔堢О綾籑gProxyXXXService涓轟唬鐞嗘湇鍔$被鐨勫師鍥犮?/p>
鍥?span class="Apple-converted-space">聽(tīng)19鈥? 浠g悊鏈嶅姟鍜屾湇鍔″櫒鏈嶅姟綾葷殑綾誨浘
瀵逛簬鏋氫婦璧勬簮鎿嶄綔錛孧gHttpEnumerateResources::Execute(...)鐨勬簮浠g爜濡備笅鎵紺恒傝皟鐢ㄨ繖涓柟娉曚細(xì)鍒涘緩涓涓唬鐞嗚祫婧愭湇鍔$被MgProxyResourceService鐨勫璞★紝鐒跺悗璋冪敤MgProxyResourceService::EnumerateResources(...)鏋氫婦璧勬簮錛屾渶鍚庡皢鎿嶄綔鐨勬墽琛岀粨鏋滄斁鍏gHttpResponse瀵硅薄涓?/p>
void MgHttpEnumerateResources::Execute(MgHttpResponse& hResponse) { Ptr hResult; hResult = hResponse.GetResult(); // 媯(gè)鏌TTP璇鋒眰涓殑鍙傛暟 ValidateCommonParameters(); // 鍒涘緩MgProxyResourceService瀹炰緥 Ptr mgprService = (MgResourceService*)(CreateService(MgServiceType::ResourceService)); ...... // 鎵ц鏋氫婦璧勬簮鎿嶄綔 Ptr byteReader = mgprService-> EnumerateResources(&mgrIdentifier, m_depth, m_type, m_computeChildren); // 濡傛灉闇瑕侊紝杞崲鍝嶅簲璇鋒眰鐨勬牸寮?/p> ProcessFormatConversion(byteReader); // 灝嗘搷浣滅粨鏋滄斁鍏ュ搷搴旇姹備腑鐨凪gHttpResult瀵硅薄 hResult->SetResultObject(byteReader, byteReader->GetMimeType()); } MgByteReader* MgProxyResourceService::EnumerateResources( MgResourceIdentifier* resource, INT32 depth, CREFSTRING type, INT32 properties, CREFSTRING fromDate, CREFSTRING toDate, bool computeChildren) { MgCommand cmd; cmd.ExecuteCommand(m_connProp, MgCommand::knObject, MgResourceService::opIdEnumerateResources, 7, Resource_Service, BUILD_VERSION(1,0,0), MgCommand::knObject, resource, MgCommand::knInt32, depth, MgCommand::knString, &type, MgCommand::knInt32, properties, MgCommand::knString, &fromDate, MgCommand::knString, &toDate, MgCommand::knInt8, (int)computeChildren, MgCommand::knNone); SetWarning(cmd.GetWarningObject()); return (MgByteReader*)cmd.GetReturnValue().val.m_obj; } |
4錛?灝咹TTP璇鋒眰鐨勫搷搴旂粨鏋滆繑鍥炵粰瀹㈡埛绔?/p>
璋冪敤MgHttpRequest::Execute()浼?xì)杩斿洖涓涓狹gHttpResponse瀵硅薄錛岃繖涓璞″寘鍚簡(jiǎn)HTTP璇鋒眰鐨勫搷搴旂粨鏋溿備笉榪囷紝榪橀渶瑕佽皟鐢ㄦ柟娉?strong>XXXResponseHandler::SendResponse(...)錛岃繖鏍稺eb搴旂敤鏈嶅姟鍣ㄦ墠浼?xì)灏啒q欎釜鍝嶅簲緇撴灉榪斿洖緇欏鎴風(fēng)銆?/p>
MapGuide (Ehancement) (Defect) MapGuide Tickets http://trac.osgeo.org/mapguide/report Tickets MapGuide RFC Tickets RFC OSGeo OSGeo Tickets RFC https://www.osgeo.org/cgi-bin/ldap_create_user.py 聽(tīng) OSGeo 1錛?/span> 聽(tīng)聽(tīng) 緙洪櫡淇
MapGuide
Bug
Ticket
Ticket
http://trac.osgeo.org/mapguide/search
Ticket
mapguide-users
email
Bug
Ticket
Bug
Bug
鍥?/span>
18
鈥?span style="LINE-HEIGHT: 19px">3
Ticket
Priority
Bug
Component
Bug
Severity
Bug
Milestone
Bug
Version
Bug
Version
Bug
聽(tīng)
聽(tīng)
18 鈥?/span> 3 聽(tīng)Ticket鐨勫睘鎬?/span>2錛?/span> 聽(tīng)聽(tīng) 鍔熻兘澧炲己
MapGuide RFC http://trac.osgeo.org/mapguide/wiki/MapGuideRfcs RFC RFC MapGuide RFC Wiki RFC 1錛?/span> 聽(tīng)聽(tīng) login 2錛?/span> 聽(tīng)聽(tīng) Edit this page RFC 3錛?/span> 聽(tīng)聽(tīng) Wiki XX RFC V.V RFC MapGuide ||[wiki:MapGuideRfcXX MapGuide RFC XX - xxxxxxxxxxxx]||draft||V.V||
4錛?/span> 聽(tīng)聽(tīng) Submit changes 5錛?/span> 聽(tīng)聽(tīng) MapGuide RFC XX RFC 6錛?/span> 聽(tīng)聽(tīng) RFC RFC email MapGuide mapguide-internals@lists.osgeo.org MapGuide RFC 7錛?/span> 聽(tīng)聽(tīng) RFC MapGuide PSC RFC PSC RFC PSC RFC RFC 8錛?/span> 聽(tīng)聽(tīng) enhancement Ticket RFC SVN Patch Ticket 浜哄憳錛屾病鏈夋彁浜ゆ潈闄愶紝 浜哄憳?shù)細(xì)甯姪浣犳彁浜や唬鐮佺殑銆?/span>
OSGeo MapGuide OSGeo 1錛?/span> 聽(tīng)聽(tīng) 浼?span lang="EN-US" style="LINE-HEIGHT: 19px">(Project Steering Committee)
PSC MapGuide MapGuide PSC OSGeo 2錛?/span> 聽(tīng)聽(tīng) 浜哄憳(Project Developer)
MapGuide MapGuide 3錛?/span> 聽(tīng)聽(tīng) 浜哄憳(Project Contributor)
MapGuide MapGuide (Tracker) MapGuide (Patch) (Patch) PSC MapGuide 4錛?/span> 聽(tīng)聽(tīng) 鎴?span lang="EN-US" style="LINE-HEIGHT: 19px">(Users)
MapGuide
MapGuide
濡傛灉鎯寵嚜宸辯紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide鐨勬簮浠g爜鍜岃繍琛?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide
錛岄偅涔堣鍙傝?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide寮婧愮増鐨勬枃妗?span lang="EN-US" style="LINE-HEIGHT: 19px">聽(tīng)(http://mapguide.osgeo.org/documentation.html)錛屽悇涓増鏈?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide鐨勭紪璇戞楠ゅ熀鏈浉鍚岋紝浣嗘槸緇嗚妭鍗翠笉灝界浉鍚岋紝鎵浠ヨ鎵懼埌浣跨敤鐨勬簮浠g爜鎵瀵瑰簲鐨勬枃妗o紝涓ユ牸鎸夌収鏂囨。涓弿榪扮殑姝ラ緙栬瘧MapGuide銆?/span>鍥犱負(fù)MapGuide鏈嶅姟鍣ㄥ拰Web鎵╁睍鏄袱涓嫭绔嬬殑緇勪歡錛屾墍浠ュ畠浠篃鏄嫭绔嬬紪璇戠殑銆傜紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide鏈嶅姟鍣ㄧ粍浠剁殑鍩烘湰姝ラ濡備笅錛?/span>
1錛?/span> 聽(tīng) 緙栬瘧FDO
浣跨敤浜?span lang="EN-US" style="LINE-HEIGHT: 19px">FDO鏉ヨ闂?span lang="EN-US" style="LINE-HEIGHT: 19px">GIS鏁版嵁錛屼絾鏄?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide鐨勬簮浠g爜涓茍娌℃湁鍖呭惈FDO鐨勬簮浠g爜錛屾墍浠ラ渶瑕佸紑鍙戜漢鍛樿嚜宸變笅杞?span lang="EN-US" style="LINE-HEIGHT: 19px">FDO鐨勬簮浠g爜鍜岀紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">FDO銆?/span>
2錛?/span> 聽(tīng) 璁劇疆鐜鍙橀噺
闇瑕佹敞鎰忕殑鏄笉鍚岀増鏈殑MapGuide婧愪唬鐮侀渶瑕佽緗笉鍚岀殑鐜鍙橀噺錛屾墍浠ヨ娉ㄦ剰鍙傝冨搴旂増鏈殑鏂囨。銆?/span>
3錛?/span> 聽(tīng) 緙栬瘧CS-MAP
浠?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide寮婧愮増2.1涔嬪悗錛?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide浣跨敤CS-MAP鏇夸唬浜?span lang="EN-US" style="LINE-HEIGHT: 19px">PROJ4鏉ュ鐞嗗潗鏍囩郴銆傜幇鍦?span lang="EN-US" style="LINE-HEIGHT: 19px">CS-MAP涔熸槸OSGeo鐨勪竴涓紑婧愰」鐩紝鍦ㄤ嬌鐢?span lang="EN-US" style="LINE-HEIGHT: 19px">SVN涓嬭澆MapGuide婧愮爜鐨勬椂鍊欎細(xì)鑷姩涓嬭澆CS-MAP鐨勪唬鐮侊紝涓嶈繃闇瑕佺敤鎴風(fēng)嫭绔嬬紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">CS-MAP銆?/span>
4錛?/span> 聽(tīng) 緙栬瘧OEM
灝辨槸MapGuide鎵渚濊禆鐨勭涓夋柟緇勪歡錛屼緥濡?span lang="EN-US" style="LINE-HEIGHT: 19px">ACE銆?span lang="EN-US" style="LINE-HEIGHT: 19px">SWIG銆?span lang="EN-US" style="LINE-HEIGHT: 19px">DWF Toolkit銆?span lang="EN-US" style="LINE-HEIGHT: 19px">FDO銆?span lang="EN-US" style="LINE-HEIGHT: 19px">Oracle Berkeley DB XML絳夛紝MapGuide鏈嶅姟鍣ㄥ拰Web鎵╁睍閮戒緷璧栦簬OEM錛屾墍浠ュ湪緙栬瘧MapGuide鏈嶅姟鍣ㄥ拰Web鎵╁睍鏃墮兘闇瑕佺紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">OEM錛屼絾鏄彧闇瑕佺紪璇戜竴嬈°?/span>
鍦?span lang="EN-US" style="LINE-HEIGHT: 19px">Windows騫沖彴涓婏紝鎵撳紑鏂囦歡澶?span lang="EN-US" style="LINE-HEIGHT: 19px">\MgDev\Oem\涓嬬殑Visual Studio Solution鏂囦歡oem.sln灝卞彲浠ョ紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">OEM緇勪歡銆?/span>
5錛?/span> 聽(tīng) 緙栬瘧MapGuide鏈嶅姟鍣?/span>
榪欓儴鍒嗕唬鐮佹槸MapGuide鏈嶅姟鍣ㄧ湡姝g殑浠g爜錛屽湪Window騫沖彴涓婃墦寮鏂囦歡澶?span lang="EN-US" style="LINE-HEIGHT: 19px">\MgDev\Server\涓嬬殑Visual Studio Solution鏂囦歡Server.sln灝卞彲浠ョ紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide鏈嶅姟鍣ㄣ?/span>
緙栬瘧MapGuide Web鎵╁睍鐨勬楠ゅ涓嬶細(xì)
1錛?/span> 聽(tīng) 瀹夎JDK
鎵╁睍闇瑕佸畨瑁?span lang="EN-US" style="LINE-HEIGHT: 19px">Java JDK 1.3鎴栨洿楂樼殑鐗堟湰錛屽鏋滄病鏈夊畨瑁?span lang="EN-US" style="LINE-HEIGHT: 19px">JDK錛岃璁塊棶http://java.sun.com涓嬭澆瀹夎瀹冦?/span>
2錛?/span> 聽(tīng) 璁劇疆鐜鍙橀噺
闇瑕佹敞鎰忕殑鏄笉鍚岀増鏈殑MapGuide婧愪唬鐮侀渶瑕佽緗笉鍚岀殑鐜鍙橀噺錛屾墍浠ヨ娉ㄦ剰鍙傝冨搴旂増鏈殑鏂囨。銆?/span>
3錛?/span> 聽(tīng) 緙栬瘧OEM
緇勪歡鍙渶瑕佺紪璇戜竴嬈★紝濡傛灉鍦ㄧ紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide鏈嶅姟鍣ㄦ椂宸茬粡緙栬瘧浜?span lang="EN-US" style="LINE-HEIGHT: 19px">OEM錛岄偅涔堟棤闇閲嶆柊緙栬瘧銆?/span>
4錛?/span> 聽(tīng) 緙栬瘧MapGuide Web鎵╁睍
榪欓儴鍒嗕唬鐮佹槸MapGuide Web鎵╁睍鐪熸鐨勪唬鐮侊紝鍦?span lang="EN-US" style="LINE-HEIGHT: 19px">Window騫沖彴涓婃墦寮鏂囦歡澶?span lang="EN-US" style="LINE-HEIGHT: 19px">\MgDev\Web\src涓嬬殑Visual Studio Solution鏂囦歡WebTier.sln灝卞彲浠ョ紪璇?span lang="EN-US" style="LINE-HEIGHT: 19px">MapGuide Web鎵╁睍銆?/span>
MapGuide 琛?/span> 18 鈥?span style="LINE-HEIGHT: 19px">1 鍥?/span> 18 鈥?span style="LINE-HEIGHT: 19px">2 Common OEM Web 聽(tīng)
Installer
|
MapGuide
MgDev
|
MapGuide
Web
聽(tīng)聽(tīng)BuildTools
|
l
聽(tīng)聽(tīng)
MapGuide
聽(tīng)聽(tīng)Common
|
l
聽(tīng)聽(tīng)
MapGuide
Web
聽(tīng)聽(tīng)Doc
|
l
聽(tīng)聽(tīng)
MapGudie
MapGuide
聽(tīng)聽(tīng)OEM
|
l
聽(tīng)聽(tīng)
MapGuide
聽(tīng)聽(tīng)Server
|
l
聽(tīng)聽(tīng)
MapGuide
聽(tīng)聽(tīng)UnitTest
|
l
聽(tīng)聽(tīng)
MapGuide Web
聽(tīng)聽(tīng)Web
|
l
聽(tīng)聽(tīng)
MapGuide Web
Tools
|
MapGuide Maestro Maestro 2.1.3.2.2 聽(tīng) 18 鈥?/span> 1 聽(tīng)MapGuide婧愪唬鐮佺洰褰曠粨鏋?/span> 聽(tīng)
聽(tīng) ]]>
MapGuide
Subversion
Subversion
(
http://subversion.tigris.org/
)
Subversion
TortoiseSVN
MapGuide
SVN
Windows Shell
TortoiseSVN
(
http://tortoisesvn.tigris.org/
)
TortoiseSVN
Subversion
http://svn.osgeo.org/mapguide/
Windows Shell
SVN Checkout
鍥?/span>
18
鈥?span style="LINE-HEIGHT: 19px">1
Checkout Directory
OK
MapGuide
Trunk
MapGuide
branches
MapGuide
1.0.0
2.1
聽(tīng) 聽(tīng) 18 鈥?/span> 1 聽(tīng)TortoiseSVN鐢ㄤ簬Checkout浠g爜鐨勭敤鎴風(fēng)晫闈?/span>聽(tīng)
MapGuide
http://trac.osgeo.org/mapguide/browser
MapGuide
璁稿浜洪兘鐭ラ亾MapGuide鎻愪緵浜?NET銆丳HP鍜孞ava涓夌綾誨瀷鐨刉eb API錛屼絾鏄笉鐭ラ亾MapGuide鏄浣曞垱寤鴻繖涓夌綾誨瀷鐨凙PI鐨勩傝瘯鎯充竴涓嬶紝濡傛灉鍒嗗埆鍘誨垱寤鴻繖涓夌API錛岃繖灝嗘槸涓涓緢闅劇淮鎶ょ殑宸ヤ綔銆傛瘡嬈″鍔犳垨淇敼涓浜涘姛鑳斤紝灝遍渶瑕佸涓夌綾誨瀷鐨凙PI閮借繘琛屼慨鏀廣傛墍浠ワ紝MapGuide浣跨敤浜?jiǎn)SWIG鏉ヨ嚜鍔ㄧ敓鎴愯繖涓夌綾誨瀷鐨凙PI銆傛垜鎯寵繖涓椂鍊欒澶氫漢浼?xì)闂Q屼粈涔堟槸SWIG鍛紵鎴戞庝箞浠庢潵娌℃湁鍚榪囪繖涓笢涓滃憿錛佸叾瀹烇紝鎴戜篃鏄湪鍋歁apGuide寮鍙戠殑鏃跺欐墠寮濮嬩簡(jiǎn)瑙WIG鐨勩傛墍浠ワ紝棣栧厛璁╂垜浠潵璁よ瘑涓涓婼WIG錛岀劧鍚庡啀鏉ョ湅MapGuide鏄浣曚嬌鐢⊿WIG鏉ョ敓鎴怉PI鐨勩?/p> 1. SWIG綆浠?/strong> 聽(tīng)聽(tīng)聽(tīng) SWIG鏄疭imple Wrapper and Interface Generator鐨勭緝鍐欙紝鏄竴涓府鍔╀嬌鐢–鎴栬匔++緙栧啓鐨勮蔣浠跺垱寤哄叾浠栫紪璇█鐨凙PI鐨勫伐鍏楓備緥濡傦紝鎴戞兂瑕佷負(fù)涓涓狢++緙栧啓鐨勭▼搴忓垱寤?NET API錛屼竴鑸儏鍐典笅鎴戝繀欏諱嬌鐢ㄦ墭綆++(Managed C++)鍘葷紪鍐欏ぇ閲忕殑浠g爜鎵嶈兘鐢熸垚瀹冪殑.NET API銆傛湁浜?jiǎn)SWIG錛岃繖涓満姊扮殑宸ヤ綔灝嗗彉寰楅潪甯哥畝鍗曘備綘鍙』瑕佷嬌鐢ㄤ竴涓帴鍙f枃浠跺憡璇塖WIG瑕佷負(fù)閭d簺綾誨垱寤?NET API錛孲WIG灝變細(xì)鑷姩甯綘鐢熸垚瀹冪殑.NET API銆傛槸涓嶆槸闈炲父鐨勯叿鍟婏紵 聽(tīng)聽(tīng)聽(tīng) 褰撶劧錛孲WIG涓嶄粎浠呮敮鎸佸垱寤?NET API銆傛渶鏂扮増鏈殑SWIG鏀寔甯哥敤鑴氭湰璇█Perl銆丳HP銆丳ython銆乀cl銆丷uby鍜岄潪鑴氭湰璇█C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCAML浠ュ強(qiáng)R錛岀敋鑷蟲(chóng)槸緙栬瘧鍣ㄦ垨鑰呮眹緙栫殑璁″垝搴旂敤錛圙uile, MzScheme, Chicken錛夈?/p> 聽(tīng)聽(tīng)聽(tīng) 涓嬮潰鎴戜滑閫氳繃涓涓緥瀛愭潵鐪嬬湅SWIG鏄浣曞府鎴戜滑鍒涘緩API鐨勩傚亣璁炬垜鎵撶畻涓哄涓嬬殑C++綾誨垱寤篊#鍜孞ava鐨凙PI銆?/p> 聽(tīng)聽(tīng)聽(tīng) /* SwigTest.h */ 聽(tīng)聽(tīng)聽(tīng) class CSwigTest { 聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) int Multiple(int a, int b) { return a * b; } 1.1 鎺ュ彛鏂囦歡 聽(tīng)聽(tīng)聽(tīng) 棣栧厛錛屼綘闇瑕佸啓涓涓帴鍙f枃浠?Interface File)錛屽憡璇塖WIG瑕佷負(fù)閭d簺綾葷殑閭d簺鏂規(guī)硶鍒涘緩API銆傚涓嬬殑鎺ュ彛鏂囦歡鍙負(fù)綾籆SwigTest鐨勬柟娉旳dd(...)鍜孲ubtract(...)鐢熸垚API錛屽洜涓哄湪鎺ュ彛鏂囦歡鐨勬帴鍙e0鏄庨儴鍒嗗彧澹版槑浜?jiǎn)涓や釜鏂规硶銆?/p> 聽(tīng)聽(tīng)聽(tīng) /* SwigTest.i */ 聽(tīng) 聽(tīng) /*聽(tīng)--- 鎺ュ彛澹版槑閮ㄥ垎 ---*/ 聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) int Substract(int a, int b); 聽(tīng)聽(tīng)聽(tīng) }; 聽(tīng)聽(tīng)聽(tīng) 娉ㄨВ錛?module鏍囪鐢ㄤ簬瀹氫箟SWIG鐢熸垚鐨勬ā鍧楃殑鍚嶇О錛?{%}鏍囪涓殑鍐呭浼?xì)琚竴瀛椾笉宸湴鎻掑叆SWIG鑷姩鐢熸垚鐨勬枃浠秞xx_wrapper.c涓紝鍏朵腑xxx浠h〃鐢?module鎸囧畾鐨勬ā鍧楀悕縐般傝繖涓枃浠朵細(xì)鍦ㄤ笅闈粙緇嶏紝涓嶅繀鐫鎬ュ幓鐞嗚В瀹冪┒绔熸湁浠涔堜綔鐢ㄣ?/p> 聽(tīng)聽(tīng)聽(tīng) 濡傛灉鎵撶畻涓虹被涓墍鏈夋柟娉曞垱寤篈PI錛岄偅涔堟湁涓涓潪甯哥畝鍗曠殑鍔炴硶錛屽湪鎺ュ彛鏂囦歡鐨勭被澹版槑閮ㄥ垎浣跨敤%include鏍囪銆係WIG灝嗗%include鎵鎸囧畾鐨勬枃浠惰繘琛岃娉曞垎鏋愶紝綾諱腑鎵鏈夊叕鏈夋柟娉?Public Method)閮藉皢鍦ˋPI涓毚闇層?/p> 聽(tīng)聽(tīng)聽(tīng) /* SwigTest.i */ 1.2 緙栬瘧妯″潡 聽(tīng)聽(tīng)聽(tīng) 鏈変簡(jiǎn)鎺ュ彛鏂囦歡涔嬪悗錛屽墿涓嬬殑浜嬪氨鏄墽琛屽嚑鏉″懡浠ゃ備笅闈㈡垜浠互Windows騫沖彴涓婄敓鎴?NET API涓轟緥浠嬬粛榪欎簺鍛戒護(hù)銆?/p> 聽(tīng)聽(tīng)聽(tīng) (a) 璋冪敤SWIG鑷姩鐢熸垚浠g爜 聽(tīng)聽(tīng)聽(tīng) swig -csharp聽(tīng) SwigTest.i 聽(tīng)聽(tīng)聽(tīng) 鎵ц涓婇潰鐨勫懡浠や細(xì)浜х敓涓涓狢璇█鏂囦歡SwigTest_wrapper.c鍜屽涓狢#鏂囦歡銆傚湪鏂囦歡SwigTest_wrapper.c涓紝SWIG涓烘帴鍙f枃浠朵腑鎺ュ彛澹版槑閮ㄥ垎鎸囧畾鐨勬瘡涓柟娉曚駭鐢熶竴涓叏灞鏂規(guī)硶錛屼互渚緾#浣跨敤Pinvoke璋冪敤榪欎簺鍑芥暟銆傝岄偅浜汣#鏂囦歡灝辨槸鐢ㄦ潵鐢熸垚.NET API鐨勩?/p> 聽(tīng)聽(tīng)聽(tīng)聽(tīng)(b) 涓篊++浠g爜鐢熸垚DLL(鍔ㄦ侀摼鎺ュ簱) 聽(tīng)聽(tīng)聽(tīng) cl SwigTest_wrapper.c *.cpp 聽(tīng)聽(tīng)聽(tīng) link *.obj /out:SwigTest.dll 聽(tīng)聽(tīng)聽(tīng) 鎵ц涓婇潰鐨勫懡浠わ紝浼?xì)湄?fù)鎴戜滑緙栧啓C(jī)++浠g爜鐢熸垚DLL銆傚湪緙栬瘧C++鏂囦歡鏃訛紝涓瀹氳鍖呮嫭SWIG涓烘垜浠敓鎴愮殑C++鏂囦歡SwigTest_wrapper.cpp銆?/p> 聽(tīng)聽(tīng)聽(tīng) 娉ㄦ剰錛氫負(fù)浜?jiǎn)璁╁ぇ瀹朵究浜庣悊瑙d笂杩板懡渥o(hù)錛岃繖浜涘懡浠ゅ茍娌℃湁鍒楀嚭瀹屾暣鐨勭紪璇戝拰閾炬帴閫夐」銆?/p> 聽(tīng)聽(tīng)聽(tīng)聽(tīng)(C) 鐢熸垚.NET妯″潡 聽(tīng)聽(tīng)聽(tīng) csc /out:SwigTestNotNetAPI.dll /target:library *.cs 聽(tīng)聽(tīng)聽(tīng) 鎵ц涓婇潰鐨勫懡浠ゅ氨鐢熸垚浜?NET API妯″潡SwigTestNotNetAPI.dll銆傚鏋滅敤鎴鋒兂浣跨敤榪欎簺API錛屽彧闇瑕佹坊鍔犲SwigTestNotNetAPI.dll鐨勫紩鐢?Reference)灝卞彲浠ヤ簡(jiǎn)銆?/p> 聽(tīng)聽(tīng)聽(tīng) 鐢熸垚鍏跺畠璇█綾誨瀷API鐨勫懡浠ゅ熀鏈被浼鹼紝涓嬮潰鎴戜滑鍐嶄互Java鍦║nix騫沖彴涓嬬殑鍛戒護(hù)涓轟緥緇撴潫瀵筍WIG鐨勪粙緇嶃備簨瀹炰笂錛孲WIG涔熸槸涓涓紑婧愰」鐩傚鏋滄兂浜?jiǎn)瑙f洿澶氬叧浜嶴WIG鐨勪俊鎭紝澶у鍙互鐧婚檰SWIG鐨勫畼鏂圭綉绔?a style="COLOR: rgb(51,102,153); TEXT-DECORATION: none" >www.swig.org錛岄偅閲屾湁SWIG鏈璇︾粏鐨勮祫鏂欍?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)$ swig -java SwigTest_wrapper.i 2. SWIG鍦∕apGuide涓殑搴旂敤 聽(tīng)聽(tīng)聽(tīng) 鎴戜滑鍦ㄥ墠闈㈠凡緇忔彁鍒拌繃錛孧apGuide浣跨敤浜?jiǎn)SWIG鏉ヨ嚜鍔ㄧ敓鎴?NET銆丣ava鍜孭HP榪欎笁縐嶇被鍨嬬殑API銆備絾鏄紝SWIG涔熸湁涓嶅皯闄愬埗鍜岀己闄鳳紝鎵浠apGuide瀵筍WIG婧愪唬鐮佽繘琛屼簡(jiǎn)澶ч噺鐨勪慨鏀癸紝浠ユ弧瓚寵嚜宸辯殑瑕佹眰銆備笅闈紝鎴戜滑鐪嬬湅榪欎簺鏀硅繘銆?/p> 2.1 IMake宸ュ叿 聽(tīng)聽(tīng)聽(tīng) SWIG瑕佹眰寮鍙戜漢鍛樼紪鍐欎竴涓帴鍙f枃浠訛紝閭d箞鑳藉惁璁╂帴鍙f枃浠惰嚜鍔ㄧ敓鎴愬憿錛熷熺敤涓鍙ヤ腑鍥界Щ鍔ㄧ殑騫垮憡璇嶏紝鎴戣兘錛佽櫧鐒禨WIG娌℃湁鎻愪緵榪欐柟闈㈢殑宸ュ叿錛屼絾鏄垜浠彲浠ヨ嚜宸卞紑鍙戝悧錛両Make(Interface Maker)灝辨槸涓轟簡(jiǎn)婊¤凍榪欐牱鐨勮姹傝屽紑鍙戜竴涓伐鍏鳳紝緇欏畾涓涓猉ML鏂囦歡錛屽畠鑳藉府浣犺嚜鍔ㄧ敓鎴怱WIG鎺ュ彛鏂囦歡銆傜櫥褰昅apGuide寮婧愮増鐨勪唬鐮佹祻瑙堥〉闈?http://trac.osgeo.org/mapguide/browser)錛屽湪root/trunk/MgDev/BuildTools/WebTools/IMake鏂囦歡澶逛笅鍙互鎵懼埌IMake鐨勬簮浠g爜銆?/p> 聽(tīng)聽(tīng)聽(tīng)聽(tīng) 涓嬮潰鎴戜滑浠apGuide涓嬌鐢ㄧ殑XML鏂囦歡/trunk/MgDev/Web/src/MapGuideApi/MapGuideApiGen.xml涓轟緥錛屼粙緇嶄竴涓婭Make鐨勭敤娉曘備負(fù)浜?jiǎn)渚夸簬鐞嗚В锛屽湪姝ゆ垜鍒犳帀浜?jiǎn)鏂囦歡涓殑閮ㄥ垎鍐呭銆?/p> 聽(tīng)聽(tīng)聽(tīng) <?xml version="1.0" encoding="UTF-8"?> 聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 鐢熸垚鐨勬帴鍙f枃浠剁殑鍚嶇О. --> 聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 瀵瑰簲浜?{%}鏍囪 --> 聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 鐢ㄤ簬鏇挎崲鎺ュ彛涓嬌鐢ㄧ殑閮ㄥ垎綾誨瀷 --> 聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 姝ら儴鍒嗙殑鍐呭娣誨姞鍦?{%}涔嬪悗錛屾帴鍙e0鏄庨儴鍒嗕箣鍓?--> 聽(tīng)聽(tīng)聽(tīng) 鎵ц鍛戒護(hù)鈥淚Make MapGuideApiGen.xml鈥濓紝IMake灝卞府鎴戜滑鑷姩鐢熸垚浜?jiǎn)濡備笅SWIG鎺ュ彛鏂囦歡MapGuideApi.i銆?/p> 聽(tīng)聽(tīng)聽(tīng) /* MapGuideApi.i */ 聽(tīng)聽(tīng)聽(tīng) class MgProperty: public MgNamedSerializable 聽(tīng)聽(tīng)聽(tīng) ...... 聽(tīng)聽(tīng)聽(tīng) 濡傛灉鎵撳紑鏂囦歡Proper.h錛屾垜浠彲浠ョ湅鍒癕gProperty鏈夋洿澶氱殑鏂規(guī)硶錛屼緥濡侰anSetName(...)銆備負(fù)浠涔堝彧鏈変笁涓柟娉曟坊鍔犲埌浜?jiǎn)SWIG鎺ュ彛鏂囦歡涓紵IMake鍦ㄧ敓鎴愭帴鍙f枃浠舵椂錛屽畠浼?xì)鏌ユ壘C++澶存枃浠朵腑鐨勫畯PUBLISHED_API銆傚彧鏈夎PUBLISHED_API淇グ鐨勬柟娉曪紝鎵嶄細(xì)娣誨姞鍒版帴鍙f枃浠朵腑銆?/p> 聽(tīng)聽(tīng)聽(tīng) 娉細(xì)瀹廝UBLISHED_API鍜孖NTERNAL_API鐨勫畾涔夊涓嬨?/p> 聽(tīng)聽(tīng)聽(tīng) #define PUBLISHED_API public 聽(tīng)聽(tīng)聽(tīng) #define INTERNAL_API public 聽(tīng)聽(tīng)聽(tīng) class MG_FOUNDATION_API MgProperty : public MgNamedSerializable聽(tīng) 聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) virtual INT16 GetPropertyType() = 0;聽(tīng) /// __get聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) <Parameters> 聽(tīng)聽(tīng)聽(tīng) <!-- 鐢ㄤ簬鏇挎崲綾誨瀷 --> 聽(tīng)聽(tīng)聽(tīng) <PHPTypeReplacements>聽(tīng) 聽(tīng)聽(tīng)聽(tīng) <Namespace>OSGeo.MapGuide</Namespace> 聽(tīng)聽(tīng)聽(tīng) <!--聽(tīng)鐢ㄤ簬鎸囧嚭闇瑕佸湪鐩爣璇█涓駭鐢熷搴旂殑甯擱噺綾葷殑C++綾?--> 聽(tīng)聽(tīng)聽(tīng) <Classes> 聽(tīng)聽(tīng)聽(tīng) <Headers> 聽(tīng)聽(tīng)聽(tīng) </Parameters> 聽(tīng)聽(tīng)聽(tīng) 鎵ц鍛戒護(hù)鈥淚Make.exe Constants.xml C# Constants.cs鈥濓紝IMake灝卞府鎴戜滑鑷姩鐢熸垚浜?jiǎn)涓涓狢#甯擱噺鏂囦歡Constants.cs銆傚浜庢枃浠?trunk/MgDev/Common/Foundation/Data/PropertyType.h涓畾涔変簡(jiǎn)濡備笅甯擱噺錛?/p> 聽(tīng)聽(tīng)聽(tīng) class MgPropertyType聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 鍦ㄧ敓鎴愮殑Constants.cs鏂囦歡涓紝鏈夊涓嬬殑綾誨畾涔夈?br />聽(tīng)聽(tīng)聽(tīng) class MgPropertyType聽(tīng) 聽(tīng)聽(tīng)聽(tīng) 榪欎釜鏂囦歡鍙互琚獵#鐨勭紪璇戝櫒鐩存帴緙栬瘧錛屾墍浠apGuide娌℃湁浣跨敤SWIG鐢熸垚甯擱噺鐨凙PI錛岃屾槸鐩存帴浣跨敤IMake銆偮?tīng)濡傛灉鎯崇敓鎴怭HP鎴朖ava鐨勫父閲忓畾涔夋枃浠訛紝鍙渶瑕佸皢IMake鍛戒護(hù)鐨勫弬鏁?C#"鏇挎崲涓?PHP"鎴?Jave"灝卞彲浠ヤ簡(jiǎn)銆?/p>
2.2 MapGuide瀵筍WIG鐨勪慨鏀?/strong>
聽(tīng)聽(tīng)聽(tīng) 浜嬪疄涓婃渶鏂扮殑SWIG鐗堟湰涔熸病鏈夊叏閮ㄨВ鍐寵繖浜涢棶棰橈紝鎵浠apGuide瀵筍WIG婧愪唬鐮佽繘琛屼簡(jiǎn)澶ч噺鐨勪慨鏀癸紝浠ユ弧瓚寵嚜宸辯殑瑕佹眰銆傜湅鐪婱apGuide鍦ㄤ嬌鐢⊿WIG鍛戒護(hù)鏄紶鍏ョ殑鍙傛暟錛屾垜浠彲浠ュ彂鐜版湁璁稿鍙傛暟涓嶆槸SWIG鏍囧噯鐨勫弬鏁幫紝渚嬪proxydir銆乧lsidcode銆乧lsiddata銆乧atchallcode絳夈?/p>
2.2.2 ClassId
3. 鎵╁睍MapGudie Web API
聽(tīng)聽(tīng)聽(tīng)聽(tīng)濡傛灉浣犲彂鐜扮幇鏈夌殑MapGuide Web API鏃犳硶婊¤凍浣犵殑瑕佹眰錛屾病鏈夊叧緋伙紝浣犲彲浠ュ幓灝濊瘯鎵╁睍瀹冿紝鍥犱負(fù)MapGuide鏄紑婧愮殑銆?/p>
聽(tīng)聽(tīng)聽(tīng) 濡傛灉瑕佹柊娣葷被錛屽熀鏈楠ゅ涓嬶細(xì) 聽(tīng)聽(tīng)聽(tīng) 濡傛灉瑕佹柊澧炲父閲忕被錛屽熀鏈楠ゅ涓嬶細(xì) 聽(tīng)聽(tīng)聽(tīng) <Classes> ]]> |