0

xml ファイルを文字列としてサーバーに投稿しようとしています。Xml ライブラリは tinyxml で、投稿には CInternetsession を使用しています。

xml ファイルが約 300 kb までの場合、投稿は正常に機能しています。

しかし、xml ファイルのサイズがそれを超えると、「操作がタイムアウトしました」というメッセージが表示されます。

なぜこのエラーが発生するのですか?

xml または CinternetSession の投稿のサイズに問題がありますか?

少なくとも約 20 mb の大きな xml を読み書きし、解析するための xml ライブラリの最適なリソースを知りたいです。xml 解析に制限はありますか?

    char text[7000] = {""};
SHGetSpecialFolderPath(0,xmlpth,CSIDL_APPDATA,1);

TiXmlDocument docs( "C:\\XmlData.xml" );
bool loadOkays = docs.LoadFile();

if ( !loadOkays )
{

}
else
{
    TiXmlPrinter printer;
    printer.SetIndent("\t");
    docs.Accept( &printer );
    docs.Print();
    CString URLpostdata = printer.CStr();
    #define MAX_READ_BUFFER 102400

    CString strHeaders =_T("Content-Type: text/xml");

    CString strFormData = _T("Data=<?xml version=\"1.0\" encoding=\"UTF-8\" ?><xmldata>"+URLpostdata+"</xmldata>");

    CInternetSession session;
    session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,60000);
    session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 60000);
    CHttpConnection* pConnection = session.GetHttpConnection(_T("xxx.xxx.xxx.x"));
    CHttpFile* pFile =
        pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("/WinTest/TestServlet?"));
    BOOL result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());    

    DWORD dwError;
    pFile->QueryInfoStatusCode(dwError);

    if(dwError==200)
    {
        AfxMessageBox("Data was successfully posted");
    }

}
4

1 に答える 1

0

それがタイムアウト関連の問題である場合は、 CInternetSession::SetOptionを使用してタイムアウト オプションを変更できます。

有効なタイムアウト値を取得するには、CInternetSession::QueryOptionを使用します。

例えば:

CInternetSession s;   
s.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 60000);
s.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 60000);
于 2013-02-14T10:36:16.493 に答える