2011-01-19 71 views
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)。有什麼明顯的我失蹤了嗎?

+0

GetItemFromBarcode中可能發生異常嗎?也許修改爲只返回一個內聯創建的Item來確保你的WCF配置是正確的,因爲WCF REST中的異常處理有點模糊。或者,Item類的其餘部分是什麼,也許是序列化問題?你也可以打開WCF跟蹤。 – 2011-01-19 05:25:09

+0

@James Webster,我不能拋出異常(我告訴Visual Studio打破所有異常)。其實,我想我只是想出了這個問題。 – 2011-01-19 05:28:24

回答

1

因此,看起來你不能有一個接口類型DataMember,如​​。我希望將我的NHibernate模型對象作爲DTO使用。