Я смог заставить это работать - вот что я сделал. Прежде всего, моя среда VS2010, и я использовал веб-сервер VS (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
. Кроме того, он работал нормально.
РЕДАКТИРОВАТЬ (забыл класс Product) : Вот класс Product - я украсил его атрибутами 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"}]
Я предполагаю, что вы используете enableWebScript
в вашем web.config. Измените его на webHttp
и посмотрите, что произойдет. Параметр enableWebScript
используется для большей совместимости с ASMX (я полагаю). Если вы возвращаете JSON (что делают многие из моих методов обслуживания GET), используйте webHttp
(это то, к чему я привык).
Дайте мне знать, что вы получите, и я обновлю свой ответ соответственно.