少し前にanother SOAP related questionと尋ねました。これは、Delphi XE以上で動作するSoap ClientとServerを求めています。SOAPを使用してリモートでDelphiのSOAP経由でクライアントデータセットにデータを読み取っているときに、TXMLTransformから送信されたXML解析エラーは何ですか?
誰もが解決策を見つけられなかったので、Delphi 2007の時代のデモをDelphi XEとXE2の作業状態に戻しました。私はデモが動作している、私はインドのVCLフォームベースのサーバー(インディに実行されているスタンドアロンHTTPサーバー)とSoapサーバーを持っています。サーバーデモの2つの部分は、「カスタムメソッド」(通常のSOAP関数呼び出し)と「リモートデータセット」です。私が働くことができないのはリモートデータセットです。
私が持っているエラーは、私はアクティブなクライアントデータセットを設定したとき、私はデモクライアントにこの行を行う際に、サーバーが例外を送り返し、クライアントの形態である:順番に
ClientDataSet1.Open;
これがダウンしましたDBClient.pasコード、TDataSet.OpenCursor
このRIO呼び出しによってProviderName = 'XMLTransformProvider1'
、 から読み出さしようとしているDoGetRecords
を呼び出しに:
Result := AppServer.AS_GetRecords(ProviderName, Count, RecsOut, Options,
CommandText, Params, OwnerData);
// ProviderName = 'XMLTransformProvider1', Count = -1,
// CommandText = '', Params = NULL, OwnerData = Unassigned
これは典型的なに示すこの例外で吹きます形式:
`ERemotableException: XML Parse error...`.
ERemotableException
'XML Parse Error:
Reason: The system cannot locate the object specified.
'.
インディソープデータモジュールのためのサーバー側の例外コールスタックを次に示します。
xmlutil.DocParseError(TMSDOMDocument($292C994) as IDOMDocument)
xmlutil.LoadDocFromFile(???)
Xmlxform.TXMLTransform.GetData
Xmlxform.TXMLTransformProvider.InternalGetRecords(???,???,[grMetaData],'',Null)
Provider.TCustomProvider.DoGetRecords(-1,0,1,'',Null,Null)
Provider.TCustomProvider.GetRecords(???,0,1,'',Null,Null)
SOAPDm.TSoapDataModule.GetRecords('XMLTransformProvider1',-1,0,1,'',Null,Null)
SOAPDm.TSoapDataModule.SAS_GetRecords('XMLTransformProvider1',-1,0,1,'',Null,Null)
Invoker.TInterfaceInvoker.Invoke(???,('IDataMod', 'DataMod_U', (('', ccReg, 0, 0, nil, nil,(), False), ('', ccReg, 0, 0, nil, nil,(), False), ('', ccReg, 0, 0, nil, nil,(), False), ('SAS_ApplyUpdates', ccStdCall, 3, 5, $401314, $628D50, (([pfConst], 'ProviderName', $4012DC), ([pfReference], 'Delta', $401314), ([], 'MaxErrors', $4010A0), ([pfOut], 'ErrorCount', $4010A0), ([pfVar,pfReference], 'OwnerData', $401314), ([], '', nil)), True), ('SAS_GetRecords', ccStdCall, 4, 7, $401314, $628D50, (([pfConst], 'ProviderName', $4012DC), ([], 'Count', $4010A0), ([pfOut], 'RecsOut', $4010A0), ([], 'Options', $4010A0), ([pfConst], 'CommandText', $4012DC), ([pfVar,pfReference], 'Params', $401314), ([pfVar,pfReference], 'OwnerData', $401314), ([], '', nil)), True), ('SAS_DataRequest', ccStdCall, 5, 2, $401314, $628D50, (([pfConst], 'ProviderName', $4012DC), ([pfReference], 'Data', $401314), ([], '', nil)), True), ('SAS_GetProviderNames', ccStdCall, 6, 0, $40BC38, $628D50, (([], '', nil)), True), ('SAS_GetParams', ccStdCall, 7, 2, $401314, $628D50, (([pfConst], 'ProviderName', $4012DC), ([pfVar,pfReference], 'OwnerData', $401314), ([], '', nil)), True), ('SAS_RowRequest', ccStdCall, 8, 4, $401314, $628D50, (([pfConst], 'ProviderName', $4012DC), ([pfReference], 'Row', $401314), ([], 'RequestType', $4010A0), ([pfVar,pfReference], 'OwnerData', $401314), ([], '', nil)), True), ('SAS_Execute', ccStdCall, 9, 4, nil, $628D50, (([pfConst], 'ProviderName', $4012DC), ([pfConst], 'CommandText', $4012DC), ([pfVar,pfReference], 'Params', $401314), ([pfVar,pfReference], 'OwnerData', $401314), ([], '', nil)), True), ('CustomMethod', ccStdCall, 10, 0, $4012CC, $62E668, (([], '', nil)), True)), (45872836, 16917, 16768, (153, 166, 192, 149, 84, 207, 120, 216)), $62E668, $628D50, 10),4,$2942270)
SOAPPasInv.TSoapPascalInvoker.Invoke(???,???,'',$28F3700,$28F36A0,???)
SOAPHTTPPasInv.THTTPSoapPascalInvoker.DispatchSOAP('/SOAPDMServerWAD.Sample/soap/IDataMod',???,$28F3700,$28F36A0,btSoap)
WebBrokerSOAP.THTTPSoapDispatcher.DispatchRequest(???,???,$29421C8)
HTTPApp.DispatchHandler($28E4140,THTTPSoapDispatcher($291687C) as IWebDispatch,$290FEA0,$29421C8,False)
HTTPApp.TCustomWebDispatcher.DispatchAction($290FEA0,$29421C8)
HTTPApp.TCustomWebDispatcher.HandleRequest(???,???)
HTTPApp.TDefaultWebAppServices.InvokeDispatcher
HTTPApp.TDefaultWebAppServices.HandleRequest
WebReq.TWebRequestHandler.HandleRequest($290FEA0,$29421C8)
IdHTTPWebBrokerBridge.TIdHTTPWebBrokerBridgeRequestHandler.Run(???,$28851B0,???)
IdHTTPWebBrokerBridge.TIdHTTPWebBrokerBridge.DoCommandGet(???,???,???)
IdCustomHTTPServer.TIdCustomHTTPServer.DoExecute($293AB30)
IdContext.TIdContext.Run
IdTask.TIdTask.DoRun
IdThread.TIdThreadWithTask.Run
IdThread.TIdThread.Execute
Classes.ThreadProc($28A1FE0)
何が起こっている私は信じたちは、空のHTTPレスポンスを取得しているということです。何もうまくいかない場合、これは私にとって完璧な意味を持ちます。私たちがアクセスしているHTTPのURLは機能しません。私たちがアクセスしているURLがあり、Webブラウザ経由でアクセス可能です:
http://localhost:8088/?intf=IDataMod
エラーメッセージの原因となったクライアントに戻って来ているXMLは次のようになります。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>XML Parse Error:'#$D#$A#$D#$A'Reason: The system cannot locate the object specified.'#$D#$A#$D#$A#$D#$A'</faultstring>
<faultactor/>
</SOAP-ENV:Fault>
</SOAP-ENV:Body></SOAP-ENV:Envelope>
私の質問SOAPエラーはどういう意味ですか、なぜそれが起こっているのですか?どのように修正しますか?
私はプロキシ(Fiddler)を使用し、作業用(WAD)バージョンと非稼動バージョンのリクエスト/回答を比較します。 URLは機能している可能性がありますが、ブラウザはHTTP GETリクエストを送信し、SOAPは通常POSTも使用します。 – mjn