Probleme mit ISAPI.DLL unter IIS5
Hallo zusammen,
ich habe seit einiger Zeit ein ernsthaftes Problem mit einer selbstgebauten ISAPI.DLL.
Die DLL wurde in VC++ entwickelt. Als Webserver läuft der IIS5 unter Windows 2000 Pro.
Die DLL wird von einem Clientprogramm aufgerufen welches ,als Parameter, unter anderem längere Bytestreams zur verarbeitung an die DLL übergibt. Die ganze Prozedur funktioniert mitunter mehrer tausend mal problemlos. Irgendwann stürzt der Server mit folgender Fehlermeldung im Debug ab: "command | caused an unhandled exeption".
Im Bytestream lassen sich zu dem Zeitpunkt keine veränderungen feststellen.
Dieser Fehler tritt auch auf wenn mann selbige Daten über den Servercontext an eine Anwendung, zur Anzeige, übergibt.
Es besteht zwar der Verdacht das der IIS plötzlich zeichen des Bytestreams als Befehl verwerten will. In diesem Fall müsste der Fehler, meiner meinung nach, bei jedem aufruf auftreten und nicht so unvorhergesehen.
Hat von euch vielleicht jemand ein ähnliches Problem bzw. einen Lösunsgansatz dafür.
Danke schonmal und viele Grüße
Mortiis
Hier noch ein Codesample wie die Daten an den Server übergeben werden:
UINT nRet = 0;
CHttpConnection* pHttpConn = NULL;
CHttpFile* pHttpFile = NULL;
DWORD dwReturn = 0;
LPCTSTR lpstrServer = m_strServerIP;
unsigned short usPort = PORT_NUMBER;
LPCTSTR pstrUserName = m_strUsername;
LPCTSTR pstrPassword = m_strPassword;
CString strServerPath = m_strServerPath + '?' + strFunction;
LPCTSTR pstrVerb = "POST";
LPCTSTR pstrReferer = NULL;
LPCTSTR pstrVersion = m_strHTTPVersion;
LPCTSTR pstrAcceptTypes = "Accept: */*";
DWORD dwHttpRequestFlags = INTERNET_FLAG_KEEP_CONNECTION;
UINT ntimeOut = 30; m_IntSession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 1000 * ntimeOut);
try {
//nur mit IP Adresse -> sonst auflösen
pHttpConn = m_IntSession.GetHttpConnection(lpstrServer, usPort, pstrUserName, pstrPassword);
pHttpFile = pHttpConn->OpenRequest(pstrVerb, strServerPath, pstrReferer, 1, &pstrAcceptTypes, pstrVersion, dwHttpRequestFlags);
pHttpFile->AddRequestHeaders(m_strServerHeader_1);
pHttpFile->AddRequestHeaders(m_strServerHeader_2, HTTP_ADDREQ_FLAG_ADD_IF_NEW);
if(nCount>0)
{
DWORD dwBegin = GetTickCount();
BOOL result = pHttpFile->SendRequest(m_strServerHeader_1, (LPVOID)lpBuf, nCount);
DWORD dwEnd = GetTickCount();
TRACE("SendRequest dauert %dn", dwEnd - dwBegin);
}
else
{
pHttpFile->SendRequest();
}
ich habe seit einiger Zeit ein ernsthaftes Problem mit einer selbstgebauten ISAPI.DLL.
Die DLL wurde in VC++ entwickelt. Als Webserver läuft der IIS5 unter Windows 2000 Pro.
Die DLL wird von einem Clientprogramm aufgerufen welches ,als Parameter, unter anderem längere Bytestreams zur verarbeitung an die DLL übergibt. Die ganze Prozedur funktioniert mitunter mehrer tausend mal problemlos. Irgendwann stürzt der Server mit folgender Fehlermeldung im Debug ab: "command | caused an unhandled exeption".
Im Bytestream lassen sich zu dem Zeitpunkt keine veränderungen feststellen.
Dieser Fehler tritt auch auf wenn mann selbige Daten über den Servercontext an eine Anwendung, zur Anzeige, übergibt.
Es besteht zwar der Verdacht das der IIS plötzlich zeichen des Bytestreams als Befehl verwerten will. In diesem Fall müsste der Fehler, meiner meinung nach, bei jedem aufruf auftreten und nicht so unvorhergesehen.
Hat von euch vielleicht jemand ein ähnliches Problem bzw. einen Lösunsgansatz dafür.
Danke schonmal und viele Grüße
Mortiis
Hier noch ein Codesample wie die Daten an den Server übergeben werden:
UINT nRet = 0;
CHttpConnection* pHttpConn = NULL;
CHttpFile* pHttpFile = NULL;
DWORD dwReturn = 0;
LPCTSTR lpstrServer = m_strServerIP;
unsigned short usPort = PORT_NUMBER;
LPCTSTR pstrUserName = m_strUsername;
LPCTSTR pstrPassword = m_strPassword;
CString strServerPath = m_strServerPath + '?' + strFunction;
LPCTSTR pstrVerb = "POST";
LPCTSTR pstrReferer = NULL;
LPCTSTR pstrVersion = m_strHTTPVersion;
LPCTSTR pstrAcceptTypes = "Accept: */*";
DWORD dwHttpRequestFlags = INTERNET_FLAG_KEEP_CONNECTION;
UINT ntimeOut = 30; m_IntSession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 1000 * ntimeOut);
try {
//nur mit IP Adresse -> sonst auflösen
pHttpConn = m_IntSession.GetHttpConnection(lpstrServer, usPort, pstrUserName, pstrPassword);
pHttpFile = pHttpConn->OpenRequest(pstrVerb, strServerPath, pstrReferer, 1, &pstrAcceptTypes, pstrVersion, dwHttpRequestFlags);
pHttpFile->AddRequestHeaders(m_strServerHeader_1);
pHttpFile->AddRequestHeaders(m_strServerHeader_2, HTTP_ADDREQ_FLAG_ADD_IF_NEW);
if(nCount>0)
{
DWORD dwBegin = GetTickCount();
BOOL result = pHttpFile->SendRequest(m_strServerHeader_1, (LPVOID)lpBuf, nCount);
DWORD dwEnd = GetTickCount();
TRACE("SendRequest dauert %dn", dwEnd - dwBegin);
}
else
{
pHttpFile->SendRequest();
}
Please also mark the comments that contributed to the solution of the article
Content-Key: 31289
Url: https://administrator.de/contentid/31289
Printed on: April 26, 2024 at 12:04 o'clock
2 Comments
Latest comment
Hast Du die Möglichkeit, das ganze mal unter IIS 6 zu verwenden?
Der IIS ist ja an und für sich schon heikel...
Ist er wenigstens aktuell gepatcht?
Lonesome Walker
PS: mit der ISAPI.DLL (original) hatte ich schon öfters Probleme; manchmal waren sie auf einmal von selbst verschwunden, manchmal nach einem Patch... ist aber schon lange her...
Der IIS ist ja an und für sich schon heikel...
Ist er wenigstens aktuell gepatcht?
Lonesome Walker
PS: mit der ISAPI.DLL (original) hatte ich schon öfters Probleme; manchmal waren sie auf einmal von selbst verschwunden, manchmal nach einem Patch... ist aber schon lange her...