Отдых WCF Сервис и LINQ - PullRequest
       18

Отдых WCF Сервис и LINQ

1 голос
/ 30 июля 2010

Столкнулся с интересной проблемой веб-службы WCF Restful, которую я пишу.Кажется, что-то кеширует объекты данных LINQ.Я постараюсь объяснить ...

Это мое первое занятие веб-сервисами, и я не эксперт по LINQ, поэтому, если я плохо объясню это, пожалуйста, держитесь со мной ...

Веб-сервисявляется сборкой WCF-службы Restful на .NET 4.0 и в настоящее время выполняется на моем локальном сервере разработки ASP.net.

У меня есть база данных MSSQL 2008, которая содержит диапазон допустимых IP-адресов, которые веб-служба использует LINQ для проверкипротив.Механизм, который проверяет IP-адрес клиента в соответствии с допустимым диапазоном IP-адресов из БД, успешно работает как независимо протестированный.

СЦЕНАРИЙ: IP-адрес клиента составляет 127.0.0.1, допустимый диапазон IP-адресов: от 127.0.0.0 до 127.0.0.5

Я выполняю запрос GET от Fiddler к веб-сервису, и он работает как надо, возвращая мне хороший код состояния 200.Затем я изменяю диапазон в БД с 127.0.0.0 на 127.0.0.0 и все еще получаю 200 кодов состояния, когда я должен получить 401 код состояния.Затем я иду в Visual Studio и просто сохраняю файл (без каких-либо изменений), возвращаюсь в Fiddler и повторяю запрос, и теперь я получаю требуемый код состояния 401.

В веб-службе я устанавливаю Cache-Заголовки Control и Pragma для «no-cache», присутствующие в ответе:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Fri, 30 Jul 2010 16:12:56 GMT
X-AspNet-Version: 4.0.30319
Pragma: no-cache
Content-Length: 1121680
Cache-Control: no-cache
Content-Type: application/xml; charset=utf-8
Connection: Close

или ..

HTTP/1.1 401 Unauthorized
Server: ASP.NET Development Server/10.0.0.0
Date: Fri, 30 Jul 2010 16:26:48 GMT
X-AspNet-Version: 4.0.30319
Pragma: no-cache
Content-Length: 88
Cache-Control: no-cache
Content-Type: application/xml; charset=utf-8
Connection: Close

Мне кажется, что что-то в процессе LINQ кешируетданные, которые он первоначально получил от первого запроса и не возвращается в БД для каждого последующего запроса.Как только я сохраняю любой файл в веб-сервисе, он вызывает перекомпиляцию сервиса и, таким образом, выполняет другой поиск для получения данных.

Кто-нибудь когда-либо видел подобную ситуацию раньше?

1 Ответ

0 голосов
/ 30 июля 2010

Можете ли вы проверить свой вызов LINQ-to-SQL напрямую, не обращаясь к веб-службе, просто чтобы убедиться, что LINQ-to-SQL может выполнять кеширование для вас?

Кроме того, вот ссылка на проблему, которая похожа на вашу, и требует, чтобы вы отключили отслеживание объектов. Значение по умолчанию этого свойства в контексте данных: true. Соответствующий раздел поста:

Ваше решение - отключить объект отслеживание (кэширование для LINQ) контекст данных вроде так. myContext.ObjectTrackingEnabled = false;

Надеюсь, это поможет!

...