2013-01-31 33 views
0

我有作爲配置一個WCF:WCF實例變量得到由一個單獨的實例改變

ConcurrencyMode = ConcurrencyMode.Multiple, 
InstanceContextMode = InstanceContextMode.PerSession 

我有一個全局變量來定義的,我希望在整個會議期間保持其價值,它持有該值。

我已經用來初始化該變量和保持其值的一個實例(說123) 我已經用來初始化該變量和保持其值的另一實例(456說)

然而,在第二實例初始化之後變量,第一個實例(會話)的值變成456!這不是預期的!

有什麼我在這裏失蹤?

+1

如何被定義的變量?它是靜態的嗎? –

+0

你能告訴我們有問題的代碼嗎? –

回答

1

它應該正常工作 - 重新檢查您的代碼如下。

服務合同:

[ServiceContract] 
public interface IService1 
{  
    [OperationContract] 
    string GetData();  
} 

服務實現

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class Service1 : IService1 
{ 
    int i = 0; 

    public string GetData() 
    { 
     i++; 
     return string.Format("Instance number: {0}", i); 
    }  
} 

現在要求用同一實例的服務會給遞增值「INT I」從的GetData但對於新的實例將開始與1.

查看以下來自客戶的電話

using (var client = new HttpProxy.Service1Client("NetTcpBinding_IService1")) 
{ 
    Console.WriteLine("Response {0}", client.GetData()); 
    Console.WriteLine("Response {0}", client.GetData()); 
} 

using (var client2 = new HttpProxy.Service1Client("NetTcpBinding_IService1")) 
{ 
    Console.WriteLine("Response {0}", client2.GetData()); 
    Console.WriteLine("Response {0}", client2.GetData()); 
} 

using (var client = new HttpProxy.Service1Client("WSHttpBinding_IService1")) 
{ 
    Console.WriteLine("Response {0}", client.GetData()); 
    Console.WriteLine("Response {0}", client.GetData()); 
} 

與CreateChannel創建代理實例

var binding = new NetTcpBinding(); 
        var address = new EndpointAddress("net.tcp://localhost:8523/Service1"); 
        var channelFactory = new ChannelFactory<WcfServLib.IService1>(binding, address); 

        WcfServLib.IService1 proxy = channelFactory.CreateChannel(); 

        Console.WriteLine(proxy.GetData()); 
        Console.WriteLine(proxy.GetData()); 


        channelFactory = new ChannelFactory<WcfServLib.IService1>(binding, address); 
        proxy = channelFactory.CreateChannel(); 

        Console.WriteLine(proxy.GetData()); 
        Console.WriteLine(proxy.GetData()); 

        channelFactory.Close(); 

服務實現

[ServiceBehavior(InstanceContextMode= InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)] public class Service1 : IService1 { int i = 0; public string GetData() 
    { 
     return string.Format("SessionID:{0}, Local variable i:{1}", OperationContext.Current.SessionId, i++); 
    }   
} 
+0

嗨,我用下面的代碼來創建代理 –

+0

我使用下面的代碼來創建實例 昏暗myBinding由於NetTcpBinding的 myBinding =新NetTcpBinding的(SecurityMode.None,FALSE) 昏暗oChannelFactory作爲新的ChannelFactory(中MasterWCF.ICaseflowWCFService )(myBinding) myBinding.ReceiveTimeout =新時間跨度(10,10,10,10) myBinding.MaxReceivedMessageSize = 2147483647 oChannelFactory.Endpoint.Address =新的EndpointAddress(NetTcpAddress) 昏暗代理作爲MasterWCF.IWCFService 代理= oChannelFactory。 CreateChannel() –

+0

這是創建新實例(代理)的正確方法嗎? –