2010-07-30 48 views
6

有沒有人有使用.NET Web服務訪問Sitecore項目的運氣?我的服務器上有很多Web應用程序仍在Coldfusion中。我希望能夠調用Web服務來下拉項目,但是當我嘗試這樣做時,我得到一個異常「Sitecore.Data.Items.Item無法序列化,因爲它沒有無參數構造函數。」通過.NET Web服務訪問Sitecore項目

+1

我不確定這是可能的。一個Sitecore.Data.Items.Item是一個非常健壯的(閱讀:充滿了做更多的Sitecore DAL調用的方法)類,真的不適合從Web服務返回。你爲什麼做這個?也許有一個更簡單的實現? – EliThompson 2010-07-30 18:58:54

+0

我對一些簡單的東西絕對開放。基本上,我在Sitecore中有許多內容項目需要在Coldfusion應用程序中顯示。在我的特殊情況下,我在Sitecore中擁有所有的新聞文章,但是有一些Coldfusion應用程序以某種形式或形式吸引新聞項目。 – Kyle 2010-07-30 20:24:30

+0

提供了很多選項來回答這個問題,但沒有給出足夠清晰的反饋給這個男人一個很好的答案。 – techphoria414 2010-09-06 04:43:11

回答

7

看看Sitecore標準的Web服務,你可以在你的解決方案的/ sitecore/shell/WebService文件夾下找到它。它提供了一些Sitecore項目和字段的基本操作,但它通常足以用於提取或保存數據。

希望這會有所幫助。

+2

感謝您的提示。我想我基本上已經斷定這不能做到。 – Kyle 2010-08-02 20:31:19

+0

你能否進一步解釋爲什麼標準服務不適合你?基於你在這裏說的一切,這聽起來像是最好的解決方案 – techphoria414 2010-08-10 21:45:09

+1

我相信它會以某種方式工作。這裏的關鍵是我希望能夠重用已經編寫的方法來檢索在我的一個sitecore頁面上的Web控件內部使用的特定項目集合。基本上我不想有兩個不同的代碼片段來維護它們,基本上都是一樣的。 – Kyle 2010-08-11 17:26:56

2

我在SDN forum上回答了這個問題。您可以創建自己的包裝對象,該對象用Sitecore項目填充並設置其成員。最難的部分是將您的會員編成文件並從真實的Sitecore項目中分配它們。如果你想要一切,那麼我認爲這將是困難的。如果你只是想要一些東西,那麼它是可行的。例如。

[Serializable] 
public class SitecoreItem { 
    public string ID; 
    // more members 

    SitecoreItem(Sitecore.Data.Items.Item scItem) { 
     this.ID = scItem.ID; 
     // assign more members from the true Sitecore item 
    } 

} 

然後在您的WS方法填補一個新的實例與您的實際Sitecore的項目並返回:

return new SitecoreItem(actualSCItem); 
+0

謝謝,這是有道理的。有關如何使它更通用的想法?我想有一些東西可以用於任何項目以返回所有字段。我意識到你說這會更困難,但是你有什麼想法可以開始討論這個問題嗎? – Kyle 2010-08-05 13:09:05

+0

你不能序列化Sitecore.Data.Items.Item類,所以你唯一的辦法就是創建一個包裝器並完成分配成員的工作。如果你花時間去瀏覽所有的屬性,這個解決方案是通用的。唯一的其他選擇是使用內置的WS Yan提到 – 2010-08-05 14:50:12

+0

字段類可以序列化嗎?這將是我的關鍵。我需要獲取所有的字段信息,而不是每個模板都包含相同的字段。 – Kyle 2010-08-05 15:33:03

1

如果這兩個串行器及解串器可以訪問Sitecore的數據庫,那麼你可以很輕鬆創建一個只包含ID,數據庫名稱,版本和語言的封裝器。然後在另一端進行反序列化時,可以使用該信息從數據庫中重新獲取相同的Sitecore項目。

如果反序列化器根本無法訪問數據庫,那麼它確實取決於您對使用數據的需求。我通常會遍歷所有字段(請先記住使用item.Fields.ReadAll()),並將它們存儲在字典中以便於訪問。對於序列化,我將其轉換爲鍵值對的List<T>,並忽略Dictionary成員(因爲它不能被序列化),然後在反序列化中重新填充它。我還在課堂上保留了一些其他屬性,如ID,語言,版本,模板,路徑等。如果你創建一個完整的模型類庫,以便每個模板都映射到一個類(有些人可以),你可以(可能)直接將它們序列化,因爲它們可能(可能)不再綁定到Sitecore項目。

+0

整個類庫的東西正是我們所做的。每個模板都有一個類,每個字段都映射到一個屬性。我們在Sitecore中創建了一個工具來自動構建這些工具。我建議這種方法,但前提是你可以自動化。如果沒有,那麼就像爲Sitecore項目的每個成員創建包裝一樣繁瑣。 – 2010-08-05 18:10:35