2013-08-06 32 views
3

我有一個服務代碼,如:WCF服務不能同時表現

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    void MyOperation1(); 
} 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession,ConcurrencyMode=ConcurrencyMode.Multiple)] 
public class service1 : IService1 
{ 
    public service1() 
    { 
     Console.WriteLine("creating instance"); 
    } 
    public void MyOperation1() 
    { 
     Console.WriteLine("starting.."); 
     Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId); 
     Thread.Sleep(1000); 
     Console.WriteLine("Ending.."); 
    } 
} 

我的客戶代碼如下所示:

static void Main(string[] args) 
    { 
     Thread[] t = new Thread[10]; 
     NetTcpBinding myBinding = new NetTcpBinding(); 
     EndpointAddress myEndpoint = new EndpointAddress("net.tcp://localhost:8000/MyService"); 
     ChannelFactory<IService1> myChannelFactory = new ChannelFactory<IService1>(myBinding, myEndpoint); 
     IService1 instance = myChannelFactory.CreateChannel(); 
     for (int i = 0; i < 10; i++) 
     { 
      t[i] = new Thread(new ThreadStart(delegate() 
      { 
       instance.MyOperation1(); 
      })); 
     } 
     for (int i = 0; i < 10; i++) 
     { 
      t[i].Start(); 
     }   
    } 

我得到一個輸出(其中調用一個執行的一個) :

creating instance 
starting.. 
3 
Ending.. 
starting.. 
3 
Ending.. 
starting.. 
12 
Ending.. 
starting.. 
3 
Ending.. 
starting.. 
12 
Ending.. 
starting.. 
3 
Ending.. 
starting.. 
12 
Ending.. 
starting.. 
3 
Ending.. 
starting.. 
12 
Ending.. 
starting.. 
3 
Ending.. 

我期待所有的通話平行像這樣開頭:

​​

回答

4

這可能是由於您使用單個客戶端(通道)實例。

您創建的新線程必須等待上一個線程釋放通道才能使用它。

+0

好的。在那種情況下如何實現一個會話的併發? – Debdeep