GSerg писал(а):Т.е. dispose ты вызываешь не у всего, а выборочно только у sr.
GSerg писал(а):Оставшиеся без Dispose объекты:
GR.GetRequestStream()
GR.GetResponse()
GR.GetResponse().GetResponseStream().
MSDN писал(а):Внимание! Необходимо вызвать метод Stream.Close, чтобы закрыть поток и освободить подключение для повторного использования. Неудачное закрытие потока приведет к нехватке подключений для приложения.
Dim foo as stream = GR.GetRequestStream()
Dim readStream As New StreamWriter(foo)
readStream.Write(Query)
readStream.Close()
readStream.Dispose()
readStream = Nothing
foo.Close
foo.Dispose
GSerg писал(а):xfolder, ты не понял... Ты теперь повторно получашь новый streamreader и закрываешь его, а должен закрыть предыдущий...
GSerg писал(а):xfolder, я не буду править твой код, раз ты сам не захотел распространить показанный и очень простой принцип на все части когда, где его нужно применить, с учётом того, что даже все эти части я тебе перечислил.
GSerg писал(а):Если ты сам не можешь соединить http://bbs.vbstreets.ru/viewtopic.php?p=6644640#6644640 и http://bbs.vbstreets.ru/viewtopic.php?p=6644647#6644647, то я не знаю тогда.
Dim GR As WebRequest = HttpWebRequest.Create(Settings.RisServer & IIf(Settings.RisPort = 0, "", ":" & Settings.RisPort))
GR.Method = "POST"
GR.ContentType = "text/xml"
GR.ContentLength = Query.Length
GR.ConnectionGroupName = WsTools.GetGuid
GR.Timeout = Timeout
Dim foo As Stream = GR.GetRequestStream()
Dim readStream As New StreamWriter(foo)
readStream.Write(Query)
readStream.Close()
readStream.Dispose()
readStream = Nothing
foo.Close()
foo.Dispose()
Dim RS As Stream = GR.GetResponse().GetResponseStream()
Dim SR As StreamReader = New StreamReader(RS, Encoding.GetEncoding(0))
Result = SR.ReadToEnd()
SR.Close()
SR.Dispose()
SR = Nothing
RS.Close()
RS.Dispose()
GSerg писал(а):Блин, xfolder...
Да закрывай же наконец ВСЕ объекты, а не часть.
GR.GetResponse() - тоже объект с методом close, который надо вызвать. И его тоже давай в отдельную переменную.
Ну неужели трудно MSDN посмотреть на предмет ВСЕХ используемых классов?..
Dim GR As WebRequest = HttpWebRequest.Create(Settings.RisServer & IIf(Settings.RisPort = 0, "", ":" & Settings.RisPort))
GR.Method = "POST"
GR.ContentType = "text/xml"
GR.ContentLength = Query.Length
GR.ConnectionGroupName = WsTools.GetGuid
GR.Timeout = Timeout
Dim foo As Stream = GR.GetRequestStream()
Dim readStream As New StreamWriter(foo)
readStream.Write(Query)
readStream.Close()
readStream.Dispose()
readStream = Nothing
foo.Close()
foo.Dispose()
Dim R As WebResponse = GR.GetResponse
Dim RS As Stream = R.GetResponseStream()
Dim SR As StreamReader = New StreamReader(RS, Encoding.GetEncoding(0))
Result = SR.ReadToEnd()
SR.Close()
SR.Dispose()
SR = Nothing
RS.Close()
RS.Dispose()
R.Close()
R = Nothing
GSerg писал(а):Значит остались другие аналогичные куски в программе.
Если регулярный (через каждую тысячу, скажем) вызов GC.Collect позволяет избежать проблемы, значит это действительно так.
xfolder писал(а):проблема решена!
просто нужно было добавить
GR.KeepAlive = False
GR.ServicePoint.MaxIdleTime = 3000
и все заработало
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33