2012-12-11 56 views
0

我正在創建一個wcf自託管服務。我正在使用UriTemplate類來自定義方法的url。下面在WCF服務中傳遞用戶定義的參數導致問題

public interface ISelfService 
    { 
     [WebInvoke(Method = "POST", UriTemplate = "ack/{errorcode}/{uniquefileid}")] 
     [OperationContract] 
     void Ack(ErrorCode errorcode, string uniquefileid); 

     [WebInvoke(Method = "POST", UriTemplate = "filechanged/{metainfo}")] 
     [OperationContract] 
     void FileChanged(MetaInformation metainfo); 

    } 

每當我運行這個程序,我在合同「ISelfHostService」收到以下錯誤

操作「FileChanged」的代碼片段給出了一個查詢 變量命名爲「元信息」類型的'Natash.Common.MetaInformation', ,但類型'Natash.Common.MetaInformation'不能通過 'QueryStringConverter'轉換。爲UriTemplate查詢的值的變量必須 已經種可以通過轉換「QueryStringConverter」

任何一個可以告訴我,爲什麼會出現這種情況?

而且,我還沒有對web.config文件進行任何修改。我需要在那裏做任何修改嗎?

元信息定義如下

[DataContract] 
    public struct MetaInformation 
    { 
     [DataMember] 
     public string Author { get; set; } 
     [DataMember] 
     public string tags { get; set; } 
     [DataMember] 
     public string categories { get; set; } 
     [DataMember] 
     public string description { get; set; } 
} 
+0

我相信,你的類型是不可自由兌換。 –

回答

1

試試這個

public interface ISelfService{

[OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "/ack?errorcode={errorcode}&uniquefileid={uniquefileid}")] 
    void Ack(ErrorCode errorcode, string uniquefileid); 

    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "/filechanged")] 
    void FileChanged(MetaInformation metainfo);} 

0

從你張貼聽起來有用於元信息類(Gettrix.Common.MetaInformation & Natash.Common.MetaInformation)2個定義該消息。

它可能是在WCF的範圍內,以便在實例化服務時看到。如果是這樣,它可能認爲沒有DataContract屬性(可能爲Natash.Common.MetaInformation)的那個屬於您正在嘗試的內容,因此不適用於該服務中的數據傳輸。

+0

這是一個錯字。只有一個名爲Natash.Common.MetaInformation的名稱空間。感謝您指出了這一點。編輯了這個問題。 – logeeks

+0

我剛剛意識到問題所在,除了url中的基本類型之外,您不能使用其他任何東西。要傳遞一個複雜的類型,它必須包含在REST調用的主體中。您需要將網址簽名更改爲「filechanged /」。 WCF將從正文中提取數據(如您指定的JSON或XML)併爲您實例化MetaInformation類。 – Eric

相關問題