¿Alguien ha tenido suerte al usar un servicio web .NET para acceder a los elementos de Sitecore? Tengo varias aplicaciones web en mi servidor que todavía están en Coldfusion. Me gustaría poder llamar a un servicio web para desplegar elementos, pero cuando traté de hacerlo obtuve una excepción: "Sitecore.Data.Items.Item no se puede serializar porque no tiene un constructor sin parámetros".Acceda a los elementos de Sitecore a través del servicio web .NET
Respuesta
Eche un vistazo al servicio web estándar de Sitecore, lo puede encontrar en la carpeta/sitecore/shell/WebService de su solución. Ofrece algunas operaciones básicas con elementos y campos de Sitecore, pero a menudo es suficiente para extraer o guardar datos.
Espero que esto ayude.
Gracias por el consejo. Creo que básicamente he llegado a la conclusión de que esto no se puede hacer sin embargo. – Kyle
¿Puede explicar más por qué el servicio estándar no funcionará para usted? basado en todo lo que dices aquí, parece la mejor solución – techphoria414
Estoy seguro de que funcionaría de alguna manera.La clave aquí es que quiero poder reutilizar métodos que ya he escrito para recuperar un conjunto específico de elementos que se usan dentro de un control web en una de las páginas de mi sitio. Básicamente no quiero tener dos piezas de código diferentes para mantener que hacen esencialmente lo mismo. – Kyle
Respondí esto también en el SDN forum. Puede crear su propio objeto contenedor que se completa con un elemento de Sitecore y establece sus miembros. La parte difícil será crear a tus miembros y asignarlos desde el elemento real de Sitecore. Si quieres todo, entonces creo que será difícil. Si solo quieres algunas cosas, entonces es factible. P.ej.
[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
}
}
Luego, en el método de WS llenar una nueva instancia con su artículo Sitecore y devolverlo:
return new SitecoreItem(actualSCItem);
Gracias, esto tiene sentido. ¿Alguna idea sobre cómo hacerla más genérica? Me gustaría tener algo que pueda usar para cualquier elemento para devolver todos los campos. Me doy cuenta de que dijiste que esto sería más difícil, pero ¿tienes alguna idea de cómo empezar a pensar en esto? – Kyle
No puede serializar la clase Sitecore.Data.Items.Item, por lo que su única forma sería crear un contenedor y hacer el trabajo de asignar los miembros. Sin embargo, esta solución es genérica si se toma el tiempo de revisar todas las propiedades. La única otra opción sería usar el WS Yan incorporado mencionado –
¿Se puede serializar la clase Fields? Esta sería la clave para mí. Necesito obtener toda la información de campo y no todas las plantillas contienen los mismos campos. – Kyle
Si tanto el serializador y el deserialiser tienen acceso a la base de datos de Sitecore, entonces muy posible Cree fácilmente un contenedor que solo serialice la ID, el nombre de la base de datos, la versión y el idioma. Luego, después de la deserialización en el otro extremo, puede volver a buscar el mismo elemento de Sitecore de la base de datos usando esa información.
Si el deserializador no tiene acceso a la base de datos, entonces realmente depende de cuáles sean sus necesidades para utilizar los datos. Normalmente recorro todos los campos (recuerde utilizar primero el item.Fields.ReadAll()
) y los guardo en un diccionario para facilitar el acceso. Para la serialización, la convierto en un List<T>
de pares de valores clave e ignoro el miembro Dictionary
(ya que no se puede serializar) y luego lo vuelvo a llenar en la deserialización. También conservo algunas otras propiedades como ID, Idioma, Versión, Plantilla, Ruta, etc. en la clase.
Alternativamente, si crea una biblioteca de clase de modelo completa para que cada plantilla se asigne a una clase (algunas personas lo hacen), puede (probablemente) serializarlas directamente ya que (probablemente) ya no están vinculadas a una Artículo de Sitecore.
Todo lo de la biblioteca de la clase es exactamente lo que hacemos. Cada plantilla tiene una clase y cada campo está asignado a una propiedad. Hicimos una herramienta en Sitecore para construir estos automáticamente. Recomiendo ese enfoque, pero solo si puedes automatizarlo. Si no es así, entonces es tan tedioso como crear el contenedor para cada miembro del elemento de Sitecore. –
- 1. Servicio web de SAP desde .NET a través de WCF
- 2. Sitecore: mover elementos de la Web a la Maestra (¿Paquetes?)
- 3. Subir unidad de informe a través del servicio web en C# .net a jasperserver
- 4. Acceda a los símbolos del kernel de Linux que no se exportan a través de EXPORT_SYMBOL *
- 5. SOAP Autenticación a través del servicio web utilizando jQuery
- 6. EWS: Acceda a los calendarios compartidos
- 7. Los elementos son nulos en Sitecore 6
- 8. Acceda al servicio web desde GWT
- 9. Acceda a los elementos por índice en una plantilla FTL
- 10. Acceda directamente a MongoDB a través de JavaScript
- 11. ¿Transfiriendo datos binarios a través de un servicio web SOAP?
- 12. Acceda a la cámara a través de la aplicación web de iPhone
- 13. Acceda a la cámara a través de OpenMAX en Android
- 14. Acceder a las configuraciones del sitecore programáticamente (Sitecore 6)
- 15. Autenticación Error al acceder a la lista de Sharepoint a través del servicio web
- 16. Sitecore Analítica: perfiles de activación y eventos de servicio web
- 17. Bugzilla - servicio web a través de JSON-RPC
- 18. ¿Cómo transferir un java.util.Map a través de un servicio web?
- 19. Google Calendar API - Acceda al propio calendario a través de la cuenta de servicio
- 20. Agregar elementos a un objeto a través del método .push()
- 21. Acceda a los datos de jQuery del elemento iframe
- 22. Acceda a los tonos de llamada incorporados del iPhone
- 23. Acceda a la lista de "sitios incorrectos" del Chromium incrustado?
- 24. AJAX entre dominios usando jsonp y el servicio web .NET a través de SSL/HTTPS
- 25. Cómo llamar a un servicio web sin wsdl en .net
- 26. Acceda a los campos de Singleton a través de un método estático
- 27. servicio .NET a Linux Daemon
- 28. Llamar a .Net 3.5 Servicio WCF desde .NET 2.0 Cliente de servicio web ASMX estándar
- 29. Implementación de pager a través del servicio WCF
- 30. Serialización de pares de nombre/valor en un objeto personalizado a través del servicio web
No estoy seguro de que sea posible. Un Sitecore.Data.Items.Item es una clase muy robusta (léase: llena de métodos que hacen más llamadas Dcal de Sitecore) y realmente no es adecuada para ser devuelta desde un servicio web. ¿Por qué estás haciendo esto? Tal vez hay una implementación más simple? – EliThompson
Definitivamente estoy abierto a algo más simple. Básicamente, tengo una serie de elementos de contenido en Sitecore que deben mostrarse en una aplicación de Coldfusion. En mi caso particular, tengo todos mis artículos de noticias en Sitecore, pero hay una serie de aplicaciones de Coldfusion que, en una forma o forma, extraen las noticias. – Kyle
muchas opciones ofrecidas para responder esta Q pero no lo suficientemente claras como respuesta para darle al hombre una buena respuesta. – techphoria414