2010-09-23 102 views
1

我有一個接收結構數組的WCF方法。 的結構包含兩個字符串「鍵」和「值」:在HTTP GET中傳遞srtucts數組作爲WCF方法參數

public struct mydata 
{ 
    public String key; 
    public String value; 
} 

[ServiceContract] 
public interface IBasicService 
{ 

    [OperationContract] 
    [WebGet(UriTemplate = "ReceiveStructsOfData?myDataArray={???????? WHAT DO I WRITE HERE?????}")] 
    void ReceiveStructsOfData(mydata[] myDataArray); 

} 

我想要的方式來支持HTTP「GET」。 我已經知道如何配置WCF以支持「GET」(端點和WebGETAttribute)。 我在WebGet的UriTemplate中寫什麼(參見上面的例子)?

客戶端代碼如何使用Framework 2.0(HttpWebRequest)?

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost/BasicWCF/BasicService.svc/ReceiveStructsOfData?myDataArray={???????? WHAT DO I WRITE HERE?????}"); 
     myHttpWebRequest.Method = "GET"; 
     HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 

謝謝...

回答

1

你的花括號之間提供的東西是參數,這將是一個價值被取代的名字。因此,服務方法看起來像:

[OperationContract] 
[WebGet(UriTemplate = "ReceiveStructsOfData?myDataArray={myDataArray}")] 
void ReceiveStructsOfData(mydata[] myDataArray) 
{ 
} 

注意括號之間的字符串是相同的參數名稱 - 這是如何請求方法的映射完成。

調用服務時,應注意將數組序列化爲字符串。畢竟,你在URL中傳遞參數,這本身就是一個字符串。通常我不會將這樣的參數傳遞給GET方法。如果它是一個PUT方法,並且你在請求中傳遞參數(而不是URL),那麼你可以將它們序列化爲JSON或XML,這取決於服務。

+0

你爲什麼不把這樣的參數傳遞給「GET」方法? – Rodniko 2010-09-23 12:13:43

+0

通常我會實現一個RESTful服務,其中GET操作只返回一個資源或一組資源。如果我們假設這是GET操作的角色,那麼這樣的參數將被用於的唯一的事情就是過濾結果。在這種情況下,我會使用某種類型的字符串過濾表達式,而不是一個結構數組。但這就是我會走的路,我並不是說其餘的都是錯的。 – Slavo 2010-09-24 07:29:43