Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Как в web.confige задать ServiceBehavior(InstanceContextMode) ? / 4 сообщений из 4, страница 1 из 1
04.02.2010, 10:18
    #36448755
OldWoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в web.confige задать ServiceBehavior(InstanceContextMode) ?
Привет! Что то не найду места в web.confige где можно задать ServiceBehavior(InstanceContextMode) ? Программно то понятно как

Код: plaintext
1.
2.
3.
4.
 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]  
    public class Service:IService
    {
    }
...
Рейтинг: 0 / 0
04.02.2010, 10:28
    #36448778
OldWoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в web.confige задать ServiceBehavior(InstanceContextMode) ?
В WCF Service config editor нет такой item, похоже что нельзя!
...
Рейтинг: 0 / 0
05.02.2010, 16:35
    #36452484
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в web.confige задать ServiceBehavior(InstanceContextMode) ?
можно, но сложно:

определяем поведение:

Код: plaintext
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.
using System;
using System.ServiceModel;
using System.Collections.ObjectModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher; 

namespace BehExt
{
    public class SessionBehavior : Attribute, IServiceBehavior
    {
        public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
        {
            //no-op
        }


        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {           
                var sb = serviceDescription.Behaviors.Find<InstanceContextMode>();
                if (sb != null)
                    sb = InstanceContextMode.PerSession;            
        }

        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
            //no-op
        }
    }
}
расширение:

Код: plaintext
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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel;
using System.ServiceModel.Configuration;  

namespace BehExt
{
    public class MyExtElement : BehaviorExtensionElement  
    {
         protected override object CreateBehavior()  
         {
             return new SessionBehavior();  
         }  
    
         public override Type BehaviorType  
         {  
             get  
             {
                 return typeof(SessionBehavior);  
             }  
         }  
    }
}
и в конфигурационном файле вносим кое-какие изменения
Код: plaintext
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.
<system.serviceModel>
    <extensions>
      <behaviorExtensions>
        <add name="MyExtElement" type="BehExt.MyExtElement, BehExt, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      </behaviorExtensions>
    </extensions>
		<services>
			<service name="BehExt.Service1" behaviorConfiguration="BehExt.Service1Behavior">
				<!-- Service Endpoints -->
				<endpoint address="" binding="wsHttpBinding" contract="BehExt.IService1">
					<!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
					<identity>
						<dns value="localhost"/>
					</identity>
				</endpoint>
				<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
			</service>
		</services>
    
		<behaviors>
			<serviceBehaviors>
				<behavior name="BehExt.Service1Behavior">          
          <MyExtElement />
					<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
					<serviceMetadata httpGetEnabled="true"/>
					<!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
					<serviceDebug includeExceptionDetailInFaults="false"/>
				</behavior>
			</serviceBehaviors>
		</behaviors>
		
	</system.serviceModel>
...
Рейтинг: 0 / 0
05.02.2010, 16:36
    #36452488
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в web.confige задать ServiceBehavior(InstanceContextMode) ?
я поленился сделать ключи/значения переключения атрибута InstanceContextMode
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Как в web.confige задать ServiceBehavior(InstanceContextMode) ? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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