Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Кэширование данных в службе WCF / 3 сообщений из 3, страница 1 из 1
25.10.2012, 09:14
    #38012427
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование данных в службе WCF
Здравствуйте!
Есть потребность использовать службу WCF для обращения к данным с сервера.
Такая ситуация: есть данные, которые часто обновляются. Есть множество пользователей, которые в одно и то же время просматривают эти данные. На сегодняшний момент организовано так, что каждый клиент посылает SQL запрос на сервер с периодичностью 10 секунд, и индивидуально получает данные. В результате множественности пользователей, сервер вынужден открывать/закрывать множество соединений для каждого, и выполнять запросы уже не раз в 10 секунд, а чаще.

Есть такая задумка, чтобы создать службу, которая раз в 10 секунд запрашивает новые данные с сервера, а затем, в течении 10 секунд, хранит их у себя в памяти. Пользователи же обращаются непосредственно к службе, к её кэшированным данным. Теперь уже для сервера не важно, как часто проходят запросы пользователей. Его дело 1 раз в 10 сек. отдавать данные службе, а служба в уже сама разбирается с пользователями, хоть 100 раз в секунду они будут обращаться.

Я создала по примеру из MSDN такую службу с организацией кэша на 10 секунд. Там есть один лишь метод - infoplus_val(), который призван отсылать пользователю текущее время.
Я так понимаю, при правильной организации кэширования, при первом запросе пользователя он должен выдавать текущее время и сохранять их к себе в память на 10 секунд, а при втором запросе пользователя - например, он посылает запрос через 2 секунды - он должен не текущее время ему возвращать, а сохраненное в кэше. И лишь по прошествии 10 секунд он должен вернуть обновлённые данные. Но почему-то, у меня он обновляет время всякий раз, когда посылаю ему запрос, не ждет 10 секунд. Почему так? Может, я что-то неправильно сделала? Может, не понимаю какой-нибудь простой истины? Подскажите, пожалуйста..

Вот интерфейс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using System.ServiceModel;
namespace WCF_Refrence
{
    [ServiceContract]     
    public interface IService_Infoplus
    {        
        [OperationContract]
        string infoplus_val();
    }   
}



Вот .svc
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
namespace WCF_Refrence
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class Service1 : IService_Infoplus
    {
        [WebGet(UriTemplate = "{id}")]
        [AspNetCacheProfile("CacheFor10Seconds")]
        public string infoplus_val()
        {
            return System.DateTime.Now.ToLongTimeString();
        }       
    }
}



Вот web-config
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
<?xml version="1.0"?>
<configuration>
	<appSettings/>
	<connectionStrings>
		<add name="connectString" connectionString="DSN=CIS" providerName="System.Data.Odbc"/>
	</connectionStrings>
	<system.web>
  
        <caching>
          <outputCacheSettings>
            <outputCacheProfiles>
              <add name="CacheFor10Seconds" duration="60" varyByParam="format" />
            </outputCacheProfiles>
          </outputCacheSettings>
        </caching>    
    
    <compilation debug="true" targetFramework="4.0"/>
		<!--
        Раздел <authentication> включает конфигурацию 
        режима проверки подлинности системы безопасности, используемую 
        в ASP.NET, которая позволяет идентифицировать входящего пользователя. 
    -->
		<authentication mode="Windows"/>
		<!--
        Раздел <customErrors> включает конфигурацию, 
        отвечающую за действия, предпринимаемые при возникновении необрабатываемых ошибок 
        во время выполнения запроса. В частности, 
        он позволяет разработчикам настраивать HTML-страницы ошибок, 
        которые будут отображаться вместо трассировки стека ошибок.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
         <error statusCode="403" redirect="NoAccess.htm" />
         <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
    -->
		<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web>
	<!-- 
      Раздел system.webServer требуется для запуска ASP.NET AJAX из Интернета
      служб IIS 7.0.  Этот раздел необязателен для предыдущей версии IIS.
  -->
	<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
			<service behaviorConfiguration="WCF_Refrence.Service1Behavior" name="WCF_Refrence.Service1">
				<endpoint address="" binding="wsHttpBinding" contract="WCF_Refrence.IService_Infoplus">
					<identity>
						<dns value="localhost"/>
					</identity>
				</endpoint>
				<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
			</service>
		</services>
		<behaviors>
			<serviceBehaviors>
				<behavior name="WCF_Refrence.Service1Behavior">
					<!-- Чтобы избежать раскрытия сведений о метаданных, присвойте приведенному ниже параметру значение false и удалите конечную точку метаданных перед развертыванием -->
					<serviceMetadata httpGetEnabled="true"/>
					<!-- Чтобы при сбое получать подробные сведения об исключении для целей отладки, установите для нижеприведенного параметра значение true.  Перед развертыванием установите значение false, чтобы избежать раскрытия информации об исключении -->
					<serviceDebug includeExceptionDetailInFaults="false"/>
				</behavior>
			</serviceBehaviors>
		</behaviors>
	</system.serviceModel>
</configuration>
...
Рейтинг: 0 / 0
31.10.2012, 06:27
    #38019531
Wild Wolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование данных в службе WCF
Проблема не решена еще. Помощь актуальна
...
Рейтинг: 0 / 0
31.10.2012, 12:30
    #38019904
a_titeev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кэширование данных в службе WCF
Wild Wolf,

по моему чего-то пропущено в конфиге. внимательнее посмотреть надо тынц
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Кэширование данных в службе WCF / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]