1
我有以下的ServiceContract定義一個簡單的WCF服務: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: (56) Failure when receiving data from the peer
和提琴手響應ReadResponse() failed: The server did not return a response for this request.
從我讀的,這應該只是工作(tm)。有什麼明顯的我失蹤了嗎?
GetItemFromBarcode中可能發生異常嗎?也許修改爲只返回一個內聯創建的Item來確保你的WCF配置是正確的,因爲WCF REST中的異常處理有點模糊。或者,Item類的其餘部分是什麼,也許是序列化問題?你也可以打開WCF跟蹤。 – 2011-01-19 05:25:09
@James Webster,我不能拋出異常(我告訴Visual Studio打破所有異常)。其實,我想我只是想出了這個問題。 – 2011-01-19 05:28:24