我能夠得到這個工作 - 這就是我所做的。首先,我的環境是VS2010,我使用的是VS Web服務器(Cassini)。
我沒有更改您的方法簽名或您的WebInvoke
屬性。該GetAll()
法的主體是這樣的:
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "product/getall")]
Product[] GetAll()
{
Product[] prods = new Product[3] {
new Product() { Name="Foo", Desc="Bar"},
new Product() {Name="Ha", Desc="Ho"},
new Product() {Name="Who", Desc="What"}
};
return prods;
}
的web.config文件看起來是這樣的:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="WebApplication2.ProdServiceAspNetAjaxBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="WebApplication2.ProdService">
<endpoint address="" behaviorConfiguration="WebApplication2.ProdServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="WebApplication2.ProdService" />
</service>
</services>
</system.serviceModel>
老實說,大部分是默認出的現成功能。我唯一改變的是將endpointBehavior
更改爲使用webHttp
而不是默認enableWebScript
。除此之外,它運行良好。
EDIT(忘了產品類):這裏的產品類 - 我飾它DataContract
和DataMember
屬性:
[DataContract]
public class Product
{
[DataMember()]
public String Name { get; set; }
[DataMember()]
public String Desc { get; set; }
}
這是我的輸出:
[{"Desc":"Bar","Name":"Foo"},{"Desc":"Ho","Name":"Ha"},{"Desc":"What","Name":"Who"}]
我的猜測是您在web.config中使用enableWebScript
。將其更改爲webHttp
並查看會發生什麼情況。 enableWebScript
設置用於更多ASMX類型的兼容性(我相信)。如果您要返回JSON(我的GET服務方法有很多),請使用webHttp
(這是我以前使用的)。
讓我知道你得到了什麼,我會相應地更新我的答案。