2010-09-23 77 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