DAX Error |
答題得分者是:jieshu
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
D7+update1
windows2003
ADO2.8+sql server 2000
一个使用RemoteDatamodule的exe服务器,6个client不停调用上面的一个取得当前日期的函数,调用几百次或者几千次后,在Server上会报一个DAX错误,奇怪的是错误消息是乱码
当尝试debug的时候,大致在出现错误的时候,debugger没有俘获到,却报错
在delphi原码中查找错误消息,发现在comobj.pas有:
function TComObjectFactory.CreateInstanceLic(const unkOuter: IUnknown; const unkReserved: IUnknown; const iid: TIID; const bstrKey: WideString; out vObject): HResult; stdcall; var ComObject: TComObject; begin // We can't write to a nil pointer. Duh. if @vObject = nil then begin Result := E_POINTER; Exit; end; // In case of failure, make sure we return at least a nil interface. Pointer(vObject) := nil; // Check for licensing. if FSupportsLicensing and ((bstrKey <> '') and (not ValidateUserLicense(bstrKey))) or ((bstrKey = '') and (not HasMachineLicense)) then begin Result := CLASS_E_NOTLICENSED; Exit; end; // We can only aggregate if they are requesting our IUnknown. if (unkOuter <> nil) and not (IsEqualIID(iid, IUnknown)) then begin Result := CLASS_E_NOAGGREGATION; Exit; end; try ComObject := CreateComObject(UnkOuter); except if FShowErrors and (ExceptObject is Exception) then with Exception(ExceptObject) do begin if (Message <> '') and (AnsiLastChar(Message) > '.') then Message := Message + '.'; MessageBox(0, PChar(Message), PChar(SDAXError), MB_OK or MB_ICONSTOP or MB_SETFOREGROUND); end; Result := E_UNEXPECTED; Exit; end; Result := ComObject.ObjQueryInterface(IID, vObject); if ComObject.RefCount = 0 then ComObject.Free; end;也就是 ComObject := CreateComObject(UnkOuter);出现了例外。 请问,为什么会出现这个错误?如何解决?或者如何能debug到错误的地方? 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听 發表人 - mustapha.wang 於 2005/02/01 16:12:41
------
江上何人初见月,江月何年初照人 |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: D7+update1 windows2003 ADO2.8+sql server 2000 一?使用RemoteDatamodule的exe服?器,6?client不停?用上面的一?取得?前日期的函?,?用几百次或者几千次后,在Server上??一?DAX??,奇怪的是??消息是?? ???debug的?候,大致在出???的?候,debugger?有俘?到,??? ??,?什么?出??????如何解??或者如何能debug到??的地方? 久病成良?--多? 千人之??,不如一士之??--兼听是沒有遇過, 可否告知取得當前日期的做法, 還有連線的呼叫方式? <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
Server很简单的一个函数:
function TiNetTransfer.GetServerDateTime(AParams: OLEVariant): OLEVariant; begin Result:=Now; end;client用的TConnectionBroker,连接TDCOMConnection procedure TForm1.Button1Click(Sender: TObject); begin SetServer; Memo1.Lines.Clear; Stop:=false; repeat ConnectionBroker1.Close; ConnectionBroker1.Open; Memo1.Lines.Add(DateTimeToStr( ConnectionBroker1.AppServer.Call('iNetTransfer','GetServerDateTime',null))); ConnectionBroker1.Close; Sleep(10); Application.ProcessMessages; if Memo1.Lines.Count>1000 then Memo1.Lines.Clear; until Stop; end;比较奇怪的是,不确定多少次后,才会出现这个DAX错误 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: Server很??的一?函?:不曉得您做這樣的用意在哪, 因為常常快速的Close, Open有可能導致系統錯誤, 建議您將Close, Open搬到迴圈上面, 這樣應該就不會有問題了, 或者用Delphi內建的Function來做, 會比較沒有問題, 例如用DataSetProvider的DataRequest事件, 我有一支連到各AppServer處理事情的程式, 就是需要在迴圈內Close, Open, 就是這樣避掉不明錯誤的. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/function TiNetTransfer.GetServerDateTime(AParams: OLEVariant): OLEVariant; begin Result:=Now; end;client用的TConnectionBroker,?接TDCOMConnectionprocedure TForm1.Button1Click(Sender: TObject); begin SetServer; Memo1.Lines.Clear; Stop:=false; repeat ConnectionBroker1.Close; ConnectionBroker1.Open; Memo1.Lines.Add(DateTimeToStr( ConnectionBroker1.AppServer.Call('iNetTransfer','GetServerDateTime',null))); ConnectionBroker1.Close; Sleep(10); Application.ProcessMessages; if Memo1.Lines.Count>1000 then Memo1.Lines.Clear; until Stop; end;比?奇怪的是,不确定多少次后,才?出???DAX?? 久病成良?--多? 千人之??,不如一士之??--兼听
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
谢谢jieshu。
我这样频繁close/open只是为了测试AppServer在多人频繁访问的情况下的稳定性。实际上这样的状况也会发生,即使移到循环外面,client多了,频繁度应该也会达到一样的程度。
或者说,怎样的测试方法才能度量Appserver的能力和稳定性?
为什么频繁close/open会导致系统错误,是通讯泛滥吗?我直接用TCP通讯,一会儿indy元件也会说refuse < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10543105&CC=235795">
久病成良医--多试
千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: ??jieshu。 我???繁close/open只是?了??AppServer在多人?繁??的情?下的?定性。??上??的??也??生,即使移到循?外面,client多了,?繁度??也??到一?的程度。 或者?,怎?的??方法才能度量Appserver的能力和?定性? ?什么?繁close/open??致系???,是通?泛???我直接用TCP通?,一?儿indy元件也??refuse < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10543105&CC=235795"> 久病成良?--多? 千人之??,不如一士之??--兼听什麼樣的系統會達到每0.01秒一次連線斷線, 應該很少吧, 要測試AppServer的能力, 應該要用實際程式, 然後開啟多個連線查詢或更新測試, 因為執行不同的程式碼, 對AppServer的負擔是不同的, 所以沒個標準, 您寫的測試, 頂多能測快速連結斷線. 應該是速度太快系統還來不及處理您的需求, 導致錯誤產生, 譬如說Windows建立連線需要0.1秒的時間, 結果您在0.1秒內做了10次同樣的需求, 或許您可用Thread試試. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |