2011-12-14 4 views
0

저는 WCF에 익숙하며 아직 실험 중입니다.WCF 스왑 서비스 인터페이스

나는이 같은 두 가지의 ServiceContract :

그 인터페이스를 구현하는 서버 측 클라이언트 클래스에
[ServiceContract] 
public interface IFirst 
{ 
    [OperationContract(IsOneWay = true)] 
    void First(); 
} 

[ServiceContract] 
public interface ISecond 
{ 
    [OperationContract(IsOneWay = true)] 
    void Second(); 
} 

: 클라이언트 측에

ServiceHost host = new ServiceHost(typeof(Client), new Uri("net.tcp://localhost:8000")); 
NetTcpBinding binding = new NetTcpBinding(); 
host.AddServiceEndpoint(typeof(IFirst), binding, ""); 
host.AddServiceEndpoint(typeof(ISecond), binding, ""); 
host.Open(); 

:

public class Client : IFirst, ISecond 
{ 
    static int count = 0; 
    int id; 

    public Client() 
    { 
     count++; 
     id = count; 
     Console.WriteLine("{0} client created.", id); 
    } 

    public void First() 
    { 
     Console.WriteLine("First from: " + id.ToString()); 
    } 

    public void Second() 
    { 
     Console.WriteLine("Second: " + id.ToString()); 
    } 
} 

및 호스트를

ChannelFactory<IFirst> firstFactory = new ChannelFactory<IFirst>(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8000")); 
IFirst iFirst = firstFactory.CreateChannel(); 
iFirst.First(); 

ChannelFactory<ISecond> secondFactory = new ChannelFactory<ISecond>(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8000")); 
ISecond iSecond = secondFactory.CreateChannel(); 
iSecond.First(); 

잘 작동합니다. 첫 번째 및 두 번째 메서드를 호출하지만 각 호출에 대해 Client 클래스의 새 인스턴스를 만듭니다. 클라이언트가 채널을 생성 할 때 서비스는 Client 객체의 새로운 인스턴스를 생성하기 때문에 분명합니다. 내가 성취하고자하는 것은 First after Second를 호출하지만 Client의 동일한 인스턴스에 대해 호출하는 것입니다. 심지어 가능할까요? 나는이 두 가지 방법을 하나의 서비스에 넣을 수는 있지만 그것이 내가 원하는 바가 아님을 안다.

답변

1

내 이해에 따라 하나의 클라이언트를 만드는 동안 두 가지 방법을 호출하려고합니다. WCF에서 서비스 동작 특성의 InstanceContextMode 속성을 설정하여 인스턴스를 제어 할 수 있습니다. 세 가지 값 -PerCall -PerSession 단 하나

는 클라이언트에서 다음 통화에 대한 활성 개체를 유지으로 당신은 PerSession 이와을 사용할 수 있습니다. 세션이 당신은 당신의 수업이 도움이 [인 ServiceBehavior (InstanceContextMode = InstanceContextMode.PerSession)]

희망을 장식 할 수

끝날 때 개체가 해제됩니다. 처음에는

0

가 나는 거의 당신이 당신의 서비스 구현 "클라이언트"호출하여 혼동했다 : 기본적으로, 어쨌든 P

하지만를, WCF는을위한 새로운 서비스 구현의 인스턴스를 생성한다는 것을 의미 InstanceContextMode.PerCall를 사용 서비스에 대한 모든 요청.

동일한 서비스 인스턴스 내에서 후속 서비스 호출을 처리하려면 PerSession 또는 Single InstanceContextModes 중 하나를 사용해야합니다.

http://msdn.microsoft.com/en-us/library/ms731193.aspx은 WCF의 세션, 인스턴스 및 동시성을 잘 요약합니다.

관련 문제