2013-03-15 73 views
0

測試WCF MVC字段保持空...爲什麼?

public string username { get; set; } 
public void Test(string test) 
{ 
    this.username = test; 
} 
public string Get() 
{ 
    return this.username 
} 

ITEST

[OperationContract] 
public string Get(); 

[OperationContract] 
public void Test(string test); 

TestProject

var webapi3 = new v3.TestClient("BasicHttpBinding_IProductData1"); 
webapi3.Test("TestString"); 
var u = webapi3.Get(); 

問題

爲什麼u保持空白,沒有我試過的?

回答

0

第二個電話號碼Get()可能會在另一個線程中被拾取。如果您想在服務器上使用狀態,則需要使username爲靜態。

您正在通過HTTP(一種無狀態協議)進行通信。

除了使字段靜態,還有其他的選擇,但這至少會讓測試通過。

+0

那豈不是更好地使用一個單身,而不是一個靜態的? – 2013-03-18 08:57:29

+0

@TheunArbeider單身人士如何更好地完成? OP看起來像測試代碼,所以我假設線程同步不是問題。在實際情況下,狀態將由狀態存儲(如數據庫等)管理。 – 2013-03-18 09:13:31

4

public void Test(string test) { this.username = test; // test not username? }

+0

錯字在我的問題。用戶名被設置爲測試,但它仍然返回爲空 – 2013-03-15 12:31:53

+2

我認爲問題一定是你的服務是無狀態的。這很好,因爲有狀態的服務可能會導致你陷入整個問題。但是,如果你必須有狀態(再強烈建議不要),可以嘗試添加'[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]'和'wsHttpBinding'綁定。 – 2013-03-15 12:46:21

+0

或者作爲一個更靈活的狀態替代方案,附加到持久數據存儲,並讓調用者在每次調用時提供一個令牌。這樣你就不會被鎖在'wsHttpBinding'中。也可能有其他方法。 – 2013-03-15 12:50:32

0

我認爲

public void Test(string test) 
{ 
    this.username = username; 
} 

應該是:

public void Test(string test) 
{ 
    this.username = test; 
} 
+0

在我的問題中輸入錯字。用戶名被設置爲測試,但仍然返回爲空 – 2013-03-15 12:33:25