有没有人有使用.NET Web服务访问Sitecore项目的运气?我的服务器上有很多Web应用程序仍在Coldfusion中。我希望能够调用Web服务来下拉项目,但是当我尝试这样做时,我得到一个异常“Sitecore.Data.Items.Item无法序列化,因为它没有无参数构造函数。”通过.NET Web服务访问Sitecore项目
回答
看看Sitecore标准的Web服务,你可以在你的解决方案的/ sitecore/shell/WebService文件夹下找到它。它提供了一些Sitecore项目和字段的基本操作,但它通常足以用于提取或保存数据。
希望这会有所帮助。
感谢您的提示。我想我基本上已经断定这不能做到。 – Kyle 2010-08-02 20:31:19
你能否进一步解释为什么标准服务不适合你?基于你在这里说的一切,这听起来像是最好的解决方案 – techphoria414 2010-08-10 21:45:09
我相信它会以某种方式工作。这里的关键是我希望能够重用已经编写的方法来检索在我的一个sitecore页面上的Web控件内部使用的特定项目集合。基本上我不想有两个不同的代码片段来维护它们,基本上都是一样的。 – Kyle 2010-08-11 17:26:56
我在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);
谢谢,这是有道理的。有关如何使它更通用的想法?我想有一些东西可以用于任何项目以返回所有字段。我意识到你说这会更困难,但是你有什么想法可以开始讨论这个问题吗? – Kyle 2010-08-05 13:09:05
你不能序列化Sitecore.Data.Items.Item类,所以你唯一的办法就是创建一个包装器并完成分配成员的工作。如果你花时间去浏览所有的属性,这个解决方案是通用的。唯一的其他选择是使用内置的WS Yan提到 – 2010-08-05 14:50:12
字段类可以序列化吗?这将是我的关键。我需要获取所有的字段信息,而不是每个模板都包含相同的字段。 – Kyle 2010-08-05 15:33:03
如果这两个串行器及解串器可以访问Sitecore的数据库,那么你可以很轻松创建一个只包含ID,数据库名称,版本和语言的封装器。然后在另一端进行反序列化时,可以使用该信息从数据库中重新获取相同的Sitecore项目。
如果反序列化器根本无法访问数据库,那么它确实取决于您对使用数据的需求。我通常会遍历所有字段(请先记住使用item.Fields.ReadAll()
),并将它们存储在字典中以便于访问。对于序列化,我将其转换为键值对的List<T>
,并忽略Dictionary
成员(因为它不能被序列化),然后在反序列化中重新填充它。我还在课堂上保留了一些其他属性,如ID,语言,版本,模板,路径等。如果你创建一个完整的模型类库,以便每个模板都映射到一个类(有些人可以),你可以(可能)直接将它们序列化,因为它们可能(可能)不再绑定到Sitecore项目。
整个类库的东西正是我们所做的。每个模板都有一个类,每个字段都映射到一个属性。我们在Sitecore中创建了一个工具来自动构建这些工具。我建议这种方法,但前提是你可以自动化。如果没有,那么就像为Sitecore项目的每个成员创建包装一样繁琐。 – 2010-08-05 18:10:35
- 1. 从另一个web项目访问Sitecore
- 2. .NET Web服务项目
- 3. 通过Silverlight访问SharePoint Web服务
- 4. 通过Web服务访问Ant?
- 5. 通过JavaScript访问REST Web服务
- 6. 使用JSON通过Android访问.NET Web服务
- 7. 无法通过API访问sitecore项目字段
- 8. .NET XML Web服务,使用类无法访问Web服务类
- 9. 从.NET访问Sharepoint列表Web服务
- 10. 在Android中访问C#.net web服务
- 11. .net web服务和同时访问
- 12. 如何通过public访问服务器中的url项目?
- 13. 通过Android使用.NET web服务
- 14. 通过.Net使用SAP Web服务
- 15. 访问Web服务
- 16. 通用.Net Web服务
- 17. 当被IIS访问时MSMQ访问被拒绝.net web服务
- 18. Sharepoint Web服务项目数据(访问“创建者”列)
- 19. 从Mac iPhone项目通过Wifi网络消费Vista .NET Localhost Web服务
- 20. Sitecore - 无法访问内容项目
- 21. 通过Web服务
- 22. 通过Web服务
- 23. 给web服务访问windows服务
- 24. Sitecore - 服务器错误访问内容项目(黄色屏幕死亡)
- 25. 访问SQL Report Web服务
- 26. Web服务.NET Framework问题
- 27. 访问WinForm项目中的Web服务时出错
- 28. 访问Flash CS3 AS3项目中的Web服务
- 29. 无法访问web服务
- 30. 拒绝Web服务访问
我不确定这是可能的。一个Sitecore.Data.Items.Item是一个非常健壮的(阅读:充满了做更多的Sitecore DAL调用的方法)类,真的不适合从Web服务返回。你为什么做这个?也许有一个更简单的实现? – EliThompson 2010-07-30 18:58:54
我对一些简单的东西绝对开放。基本上,我在Sitecore中有许多内容项目需要在Coldfusion应用程序中显示。在我的特殊情况下,我在Sitecore中拥有所有的新闻文章,但是有一些Coldfusion应用程序以某种形式或形式吸引新闻项目。 – Kyle 2010-07-30 20:24:30
提供了很多选项来回答这个问题,但没有给出足够清晰的反馈给这个男人一个很好的答案。 – techphoria414 2010-09-06 04:43:11