кто с C# знаком подскажите плиз :) - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB90.7493
BTC/USD70916.6277
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 14.10.2009, 14:49   #1
MyName
Китайский пельмень
 
Аватар для MyName
 
Регистрация: 23.07.2008
Сообщений: 1,000
Бабло: $323219
По умолчанию кто с C# знаком подскажите плиз :)

собственно 1 приложение сделал тестирую...
следующая проблема вылезла:
в приложении используются HttpWebRequest и прочая сопутствующая хрень...

так вот локально все отработало несколько раз с большими нагрузками без каких либо проблем просто как часы...

а вот на хосте где тестирую в логе ошибки лезут о том что урл пустой... причем достаточно часто лезут..

параллельно работает там же другое приложение с использованием HttpWebRequest там таких ошибок отродясь не было... :? (то есть что-то на хостинге выключено вариант исключен)


союственно вопрос... никто с таким странным поведением не сталкивался? ошибок в коде не видать вроде
__________________
Карму правят тут.
MyName вне форума  
Старый 14.10.2009, 19:21   #2
Philoet
Senior Member
 
Регистрация: 14.10.2009
Сообщений: 133
Бабло: $37955
По умолчанию

Не совсем ясно по приложению. Оно с внешними ресами работает? Из дома все ок, а с сервака куй?
Пытался ручками с сервака достучаться до ресов?
В какой момент ошибка, во время GetResponse или во время создания WebRequest.Create?
Проснифить тем же фидлером не пробовал, что ресы в ответ на запросы кажут?
В общем маловато инфы, а так - про пустой урл не слышал вроде. Разве что он действительно пустой ибо должен получаться выдиранием с предыдущей полученной страницы, а в ней не было урлы (не достучались до реса или еще что).
И что означает фраза - часто лезут. Ты с одним ресом работаешь или с несколькими? Т.е. на одном и том же ресе то работают то не работают, или на разных?
Philoet вне форума  
Старый 15.10.2009, 08:16   #3
MyName
Китайский пельмень
 
Аватар для MyName
 
Регистрация: 23.07.2008
Сообщений: 1,000
Бабло: $323219
ТС -->
автор темы ТС По умолчанию

Цитата:
Не совсем ясно по приложению. Оно с внешними ресами работает? Из дома все ок, а с сервака куй?
угу примерно так. Проблема возникает примерно в 10% запросов причем если идет вызов внешнего сайта в цикле сейчас почти сутки отпахало на запросах без цикла по 1 странице все чисто....

при этом на серваке работает второе схожее приложение там таких проблем нет.
Цитата:
Пытался ручками с сервака достучаться до ресов?
в 90% случаев приложение достукивается... рессы одни и теже. еслиб проблемма была с доступом то было 404 или ещё что-то а тут ошибка вываливается что типа я урл не передал HttpWebRequest'у O_o


Цитата:
В какой момент ошибка, во время GetResponse или во время создания WebRequest.Create?
пока по логу все чисто как повторить смогу скине полность ошибку так точно не помню... помоему всетки при креейте...

Цитата:
Проснифить тем же фидлером не пробовал, что ресы в ответ на запросы кажут?
на хостинге пока чекаю там полного доступа нет но 100% что там не 404 и т.п. в логе формируемом из эксепшенов было что урл пустой передаю...

Цитата:
В общем маловато инфы, а так - про пустой урл не слышал вроде. Разве что он действительно пустой ибо должен получаться выдиранием с предыдущей полученной страницы, а в ней не было урлы (не достучались до реса или еще что).
там только в 1 месте урл выдирается... стоит 2 проверки. 1 полученли контент нужный вобще 2 естли урл в контенте. если 404 или ещё что выпало я тупо прогоняю запрос ещё раз но в 99.9999% случая нет там 404 при предыдущих запросах....

друге урлы которые в методе запрашиваются сформированы все заранее. там может быть что угодно но только не пустой урл

Цитата:
И что означает фраза - часто лезут. Ты с одним ресом работаешь или с несколькими? Т.е. на одном и том же ресе то работают то не работают, или на разных?
часто лезут - примерно 10% всех запросов. локально запускаю 0% гонял наверное часов 8 локально за все это время ни одной ошибки. Работаю с 3мя ресами 2 у меня на серваке (вобще сервак в другом месте стоит) 1 сторонний. Бан со стороны сторонего реса исключен это партнерка... + были бы другие ошибки тогда

спасибо

зы
ещё чутка поясню.

в методе где ошибка возникает идет 2 запроса и ещё несколько при вызове функций 1го моего класса.

1 формируется урл такого типа "http://kakoi-to-url"+"id-peredani-funkcii"
то есть тут ошибка исключена еслиб был косяк с передачей id функции осталсябы какой-то-урл при таком запросе ответ все равно не 404 идет просто нет контента.

от туда забираю в числе прочего 1 урл и там идет такая проверка

if (SCoverUrl != null && SCoverUrl !="")
{
.....
}

вобщем мистика

далее идет вызов функции ещё 1го класса он тоже веб запросы гоняет... если там ошибка была бы эксепшен выглядел бы по другому...
__________________
Карму правят тут.

Последний раз редактировалось MyName; 15.10.2009 в 08:31.
MyName вне форума  
Старый 15.10.2009, 08:51   #4
Philoet
Senior Member
 
Регистрация: 14.10.2009
Сообщений: 133
Бабло: $37955
По умолчанию

Как я понимаю тебе вылетает что то вроде (в русском .NET фреймворке)
Необработанное исключение: System.UriFormatException: Недопустимый URI: URI пуст.
Собственно если это так - то даже не 99 а 100% что ты действительно пытаешься запихнуть в Create пустой урл. Если бы урл был кривой, а не пустой было бы что то вроде:
- Необработанное исключение: System.UriFormatException: Недопустимый URI: Невозможно определить формат URI.
- Необработанное исключение: System.UriFormatException: Недопустимый URI: Невозможно выполнить разбор имени хоста.

Т.е. надо все же отталкиваться от этого.
Кстати приложение не многопоточное случайно? Если да - то косяки могут самые неожиданные вылезти, в одном потоке присваиваешь урлу, в другом обнуляешь и в это время в первом потоке создается WebRequest с уже пустым урлом =)

Ну а вообще надо логировать конечно и смотреть по сорцам. Опыт показал, что как бы ты не верил, но чудес не бывает, бывают только косяки программера/админа )
Philoet вне форума  
Старый 15.10.2009, 09:02   #5
MyName
Китайский пельмень
 
Аватар для MyName
 
Регистрация: 23.07.2008
Сообщений: 1,000
Бабло: $323219
ТС -->
автор темы ТС По умолчанию

ну да именно эта ошибка

да я сам в чудеса не верю любое подобное чудо - косяк тут согласен... была наивная мысль про то что в урле идет пробел и ещё какая-та хрень но ты её только что развеял как проверяю на пустой урл выше скинул... т.ч. хз странно что за ~8ч теста ошибка локально не вывалилась ни разу а на хосте за несколько минут можно поймать....
приложение кстати однопоточное больше там пока не требуется... работает как веб сервис. + проверка стоит больше 1го раза метод вызвать даже если очень захочется не получится... тупо файл создаю при вызове удаляю по завершению работы метода... пока файл есть метод вызвать нельзя...

зы
кстати по веб конфигу для винды никто проконсультировать не может?
интересует как настроить <httpRuntime
executionTimeout = "60000"
/> в папке тоесть тупо пример конфига

сейчас просто в корне лежит конфиг. если пытаюсь ещё 1 делать в папке с приложением этим.... хостинг начинает матерится по страшному... за рабочий пример конфига готов отблагодарить символической суммой на wmz кошелёк хотя вроде и тот что в корне валяется пашет для папки но на 100% не уверен.....
__________________
Карму правят тут.
MyName вне форума  
Старый 16.10.2009, 09:27   #6
MyName
Китайский пельмень
 
Аватар для MyName
 
Регистрация: 23.07.2008
Сообщений: 1,000
Бабло: $323219
ТС -->
автор темы ТС По умолчанию

хы само лесть перестало... хз в чудеса не верю.... но в той части нефига не менял где ошибка выскакивала...

кстати никто не знает как можно "развернутую" инфу получить по ошибке? а то в 1м месте еэксепшен вылетает очень редко... в скомпилированной версии указывается тока название метода где он произощел.... а локально его достичь пока не удалось чтобы все переменные промониторить

смотрю так
ee.ToString()
где Exception ee

зы
уже не очень актуально... прозрел отрыл... но если кто-то подскажет на будуюеще буду очень благодарен
__________________
Карму правят тут.

Последний раз редактировалось MyName; 16.10.2009 в 09:45.
MyName вне форума  
Старый 16.10.2009, 11:29   #7
Philoet
Senior Member
 
Регистрация: 14.10.2009
Сообщений: 133
Бабло: $37955
По умолчанию

Мдя, бывает, спишем на косяк админа ) Хотя кстати не понял причем тут файлы "тупо файл создаю при вызове удаляю по завершению работы метода... пока файл есть метод вызвать нельзя..."

Для того чтобы получить полную инфу по тому где и когда вылез Exception я вызываю обычно:
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);

Но чтобы получить StackTrace с номерами строк и прочьими радостяи необходимо чтобы рядом с exe лежал *.pdb файл полученный при компиляции проекта (по моему только в Debug версии компиляции, хотя точно не помню).
Philoet вне форума  
Старый 16.10.2009, 11:33   #8
MyName
Китайский пельмень
 
Аватар для MyName
 
Регистрация: 23.07.2008
Сообщений: 1,000
Бабло: $323219
ТС -->
автор темы ТС По умолчанию

Philoet, про файлы просто защита от одновременного запуска метода 2 раза... при запуске метода файл делаю например "metodHelloWorldWork" в конце удаляю. соответственно в самом методе стоит проверка если файла нет то метод не будет работать... просто работаю с файлами если метод 2 раза вызвать может файл подгадить с данными

Цитата:
Но чтобы получить StackTrace с номерами строк и прочьими радостяи необходимо чтобы рядом с exe лежал *.pdb файл полученный при компиляции проекта (по моему только в Debug версии компиляции, хотя точно не помню).
спс я так понимаю в остутвии exe для веб сервиса надо попробовать сунуть это в корень или папку bin?
__________________
Карму правят тут.
MyName вне форума  
Старый 16.10.2009, 14:37   #9
Philoet
Senior Member
 
Регистрация: 14.10.2009
Сообщений: 133
Бабло: $37955
По умолчанию

Эмм.. Мне кажется лочить вызов метода созданием файла немного.. извращенно ) Если я правильно понимаю для чего ты это делаешь конечно, обычно опять таки данное действо делается для многопоточки, чтобы несколько методов в разных потоках не получили одновременный доступ к данным.
По идее для этого есть lock (советую почитать Рихтера - CLR via C#)
Пример:
Код:
public class SomeClass
{
        private readonly object lockObject = new object();

        public string DoSomething()
        {
           lock (lockObject)
           {
		...операторы
           }
           return null;
        }
        public string DoSomething2()
        {
           lock (lockObject)
           {
		...операторы
           }
           return null;
        }

}
Таким образом если мы находимся в методе DoSomething и пытаемся вызвать DoSomething2 - выполнение кода остановится на строчке lock (lockObject) и не продолжит выполнение пока в методе DoSomething мы не выйдем за пределы кода
Код:
lock (lockObject)
           {
		...операторы
           }
Или тот же метод вызывается разными запросами, и соответственно выполняется тот же код с разных инстансов? Тогда может и разумно, опять таки, в моих проектах всегда по 1й копии программа запускается, посему без надобности.

А по поводу pdb, честно говоря - я никогда не делал веб сервисы, как то без надобности было, я десктопные вещи разрабатываю, но гугль выдал следующее
http://stackoverflow.com/questions/3...is-any-benefit

Как я понимаю надо просто положить pdb в корень, проверь )
Philoet вне форума  
Старый 16.10.2009, 14:43   #10
MyName
Китайский пельмень
 
Аватар для MyName
 
Регистрация: 23.07.2008
Сообщений: 1,000
Бабло: $323219
ТС -->
автор темы ТС По умолчанию

спс пока без ошибок пашет как что нить полезет попробую

по поводу извращения... ну у меня так над аваторкой и написанно быдлокодер

по поводу лок не сталкивался раньше и не уверен что он срабоатет...
веб сервис при вызове функций грубо говоря запускает новое приложение... это грубо говоря в деталях не разбирался но спокойно можно объявить1 глобальную переменную... вызвать 10 раз веб сервис и у каждого запущенного варианта можно использовать своё значение переменной (типа как запустить несколько раз дектопное приложение)... вот на случай одновременного запуская я так и делаю
__________________
Карму правят тут.
MyName вне форума