2014-03-04 43 views
0

我想顯示從我的客戶端窗體窗體應用程序調用一個方法的次數。以下是如何定義服務和客戶端。無法顯示從客戶端Web窗體計數

在我的日誌文件中,我看到每次調用方法都會增加計數,但我無法看到從客戶端表單中放入列表的總數。

IOperator 
{ 

    SendMessage(string strMsgId, string strMessage); 

    [OperationContract] 
    List<int> GetCount(); 
} 
    [ServiceBehavior(Namespace = "http://X.org/MessageService/"] 
    Operator: IOperator 
    { 

    private List<Int32> TotalCount = new List<Int32>(); 

    public static List<int> TotalCount 
    { 
     get { return _totalCount; } 
     set { _totalCount = value; } 
    } 
SendMessage(string strMsgId, string strMessage) 
    { 
    if (strMsgId == "02") 
     { 
      lock (_lock) 
      { 
       ++_count; 
       TotalCount.Add(_count); 
      } 
      string debugFileName = "C:\\Test.txt"; 
      // Write to the file: 
      inboundMessageLog.WriteLine("{0}{1}", "Inbound Message:", strMessage.Substring(549, 27)); 
      inboundMessageLog.WriteLine("{0}{1}", "count:", _count); 
      inboundMessageLog.WriteLine("{0}{1}", "Total Count:", TotalCount.Count); 

      result = 0; 
     } 
    } 

    public List<int> GetCount() 
    { 
     return TotalCount; 
    } 
} 

編輯

我想保存在每一個給定的時間一些會話總數和獲取計數在我的文字box.I希望總數不管客戶的數量。 TotalCount是靜態的,定義爲私有靜態列表_totalCount = new List();與getter TotalCount。

我沒有明確定義的服務InstanceContextMode和肯定的是TOTALCOUNT顯示0

客戶:

var clientA = new SendServiceReference.SendService(); 
    Operator clientB = new Operator(); 

while ((DateTime.Now - startTime) <= timeoutSpan) 
     { 

       // Send request to external service and all the requests will be logged to my service since I don't have control over the external service. 
       sendMessageResult = clientA.SendMessageToExternalService("01", txtRequest.Text); 

     } 
    //display the total request received from client A for the give time span 
responseCount.Text = clientB.GetCount().Count.ToString(); 

回答

0

您不表明什麼綁定,您正在使用或如果你」我們明確定義了InstanceContextMode這個服務,但是從你描述的行爲來看,它聽起來像是默認的PerSession,它爲每個客戶創建一個新的服務實例。

最有可能發生的事情是您正在創建一個客戶端來發送消息,這就是爲什麼您看到計數器遞增。然後,您創建第二個客戶端(client2 = new Operator();,它創建另一個服務的實例,這意味着TotalCount是0或null(因爲您不表示您收到錯誤,我會猜測計數TotalCount爲0)。換言之,您不再訪問/使用增加計數的服務實例,而是使用其自己的TotalCount字段/屬性的服務的全新實例。

有幾個根據你的要求/需求,這些方法可以解決這個問題

如果你需要總數而不管客戶數量多少,你可以使TotalCount靜態,或者您可以將InstanceContextMode設置爲Single。我會勸阻使用InstanceContextMode.Single,因爲這可能導致縮放問題,並使用靜態TotalCount

如果您需要每個客戶端的總計數,那麼您將需要使用同一個客戶端,使循環中的10個呼叫撥打GetCount()。例如:

Operator client1 = new Operator(); 

for (int i =0; i < 10; i++) 
{ 
    // Send your messages 
} 

responseCount.Text = client1.GetCount().Count.ToString(); 

有CodeProject上有3種不同InstanceContextModes的插圖,可能是使用的爲您的一篇文章:Three ways to do WCF instance management

+0

我想保存總數在一些會議上每一個給定的時間並在我的文本框中獲取該計數。客戶端A正在調用某些外部服務,並且所有請求都將記錄到我的服務中。我想統計有多少請求來到我的服務,並保存總數並以任何方式顯示。 – HXD

+0

如果您只想在一段時間內包含計數,那麼您可以設置一個計時器並在該計時器中使用相同的客戶端。要麼這樣做,要麼使整個字段靜態,然後重置它(通過另一個服務調用)。 – Tim