У меня есть простая служба WCF, определенная следующий ServiceContract:службы WCF REST не возвращает DataContract объекта
[ServiceContract]
public interface IInventoryService
{
[OperationContract]
Item GetItemFromBarcode(string barcode);
[OperationContract]
string Test(string testString);
}
С Предметом определенного следующим образом:
[DataContract]
public class Item
{
[DataMember]
public virtual int Id { get; set; }
<Snip>
}
И фактическая служба реализована таким образом:
public class InventoryService : IInventoryService
{
[WebGet(UriTemplate = "/Barcode/{barcode}/Item", ResponseFormat = WebMessageFormat.Json)]
public Item GetItemFromBarcode(string barcode)
{
var item = (from b in repository.Query<ItemBarcode>()
where b.BarcodeData == barcode
select b.Item).FirstOrDefault();
return item;
}
[WebGet(UriTemplate = "/Test/{testString}",ResponseFormat=WebMessageFormat.Xml)]
public string Test(string testString)
{
return testString;
}
}
В программе app.config содержится следующее:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="RESTFriendly">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="InventoryService">
<endpoint address="/Inventory" behaviorConfiguration="RESTFriendly" binding="webHttpBinding" contract="IInventoryService"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
Теперь, когда код дампа из пути, вопрос: я могу вызвать метод Test
просто отлично с завитком или Скрипач, он возвращает последовательную строку. Однако вызов метода, возвращающего объект, ничего не возвращает. Curl плюет назад curl: (56) Failure when receiving data from the peer
и Fiddler отвечает ReadResponse() failed: The server did not return a response for this request.
Из того, что я читал, это должно просто работать (tm). Есть ли что-то очевидное, что мне не хватает?
Возможно ли, что исключение происходит в GetItemFromBarcode? Возможно, вам нужно просто изменить элемент, созданный в строке, чтобы убедиться, что ваша конфигурация WCF верна, поскольку обработка исключений в WCF REST немного запутана. В качестве альтернативы, каков остальной класс Item, возможно, это проблема сериализации? Вы также можете включить трассировку WCF. –
@James Webster, исключение не бросается, что я могу найти (я сказал Visual Studio, чтобы разбить все исключения). На самом деле, я думаю, я только что разобрался в этом вопросе. –