Qualcuno ha avuto fortuna con l'utilizzo di un servizio Web .NET per accedere agli elementi Sitecore? Ho un certo numero di applicazioni web sul mio server che sono ancora in Coldfusion. Mi piacerebbe essere in grado di chiamare un servizio web per tirare giù gli elementi, ma quando ho provato a farlo ho ottenuto un'eccezione "Sitecore.Data.Items.Item non può essere serializzato perché non ha un costruttore senza parametri."accesso Sitecore articoli via servizio Web .NET
risposta
Date un'occhiata al servizio di web standard Sitecore, lo si può trovare sotto/cartella/WebService Sitecore/guscio della vostra soluzione. Offre alcune operazioni di base con articoli e campi Sitecore, ma è spesso sufficiente per estrarre o salvare dati.
Spero che questo aiuti.
Grazie per il suggerimento. Penso di aver sostanzialmente concluso che non si può fare comunque. – Kyle
puoi spiegare ulteriormente perché il servizio standard non funzionerà per te? basato su tutto ciò che stai dicendo qui, suona come la migliore soluzione – techphoria414
Sono sicuro che funzionerebbe in qualche modo.La chiave qui è che voglio essere in grado di riutilizzare i metodi che ho già scritto per recuperare una serie specifica di elementi che sono utilizzati all'interno di un controllo web su una delle mie pagine sitecore. Fondamentalmente non voglio avere due pezzi di codice diversi da mantenere che fanno essenzialmente la stessa cosa. – Kyle
ho risposto questo sul SDN forum pure. Puoi creare il tuo oggetto wrapper che è riempito con un oggetto Sitecore e imposta i suoi membri. La parte difficile sarà quella di criptare i tuoi membri e assegnarli dal vero oggetto Sitecore. Se vuoi tutto allora penso che sarà difficile. Se vuoi solo alcune cose allora è fattibile. Per esempio.
[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
}
}
Poi nel metodo WS riempire una nuova istanza con il vostro oggetto reale Sitecore e restituirla:
return new SitecoreItem(actualSCItem);
Grazie, questo ha senso. Qualche idea su come renderlo più generico? Mi piacerebbe avere qualcosa che posso usare per qualsiasi articolo per restituire tutti i campi. Mi rendo conto che hai detto che sarebbe stato più difficile, ma hai qualche idea su come iniziare a fare questo? – Kyle
Non è possibile serializzare la classe Sitecore.Data.Items.Item in modo che l'unico modo sarebbe creare un wrapper e svolgere il lavoro di assegnazione dei membri. Questa soluzione è generica se si prende il tempo di esaminare tutte le proprietà. L'unica altra opzione sarebbe quella di utilizzare il WS Yan incorporato menzionato –
La classe Fields può essere serializzata? Questa sarebbe la chiave per me. Ho bisogno di ottenere tutte le informazioni sul campo e non tutti i modelli contengono gli stessi campi. – Kyle
Se sia il serialiser e deserialiser hanno accesso alla banca dati Sitecore, allora si può molto creare facilmente un wrapper che serializza solo l'ID, il nome del database, la versione e la lingua. Quindi, con la deserializzazione dall'altra parte, è possibile recuperare lo stesso oggetto Sitecore dal database utilizzando tali informazioni.
Se il deserialiser non ha accesso al database a tutti, poi dipende da cosa i vostri bisogni sono per l'utilizzo dei dati. In genere faccio un loop su tutti i campi (ricordati di usare prima item.Fields.ReadAll()
) e memorizzali in un dizionario per un facile accesso. Per la serializzazione, ho convertire in un List<T>
di coppie di valori chiave e ignorare l'elemento Dictionary
(in quanto non può essere serializzato) e quindi ripopolare su deserialisation. Tengo anche alcune altre proprietà come ID, Language, Version, Template, Path, ecc. Anche per la classe.
In alternativa, se si crea un'intera libreria di classi modello in modo che ogni modello sia mappato su una classe (alcune persone lo fanno), è possibile (probabilmente) serializzare quelli direttamente poiché sono (probabilmente) non più legati a un Oggetto Sitecore.
L'intera libreria di classi è esattamente ciò che facciamo. Ogni modello ha una classe e ogni campo è mappato a una proprietà. Abbiamo creato uno strumento in Sitecore per costruirli automaticamente. Raccomando questo approccio, ma solo se è possibile automatizzarlo. In caso contrario, è altrettanto noioso come creare il wrapper per ogni membro dell'elemento Sitecore. –
- 1. Servizio Web SAP da .NET via WCF
- 2. Accesso al sito web, via C#
- 3. Sitecore Droptree non esclude gli articoli
- 4. Ottieni articoli per ID in Sitecore 6.5
- 5. Sitecore nasconde il database web dal desktop del sitecore
- 6. Accesso servizio Web da jQuery - dominio croce
- 7. database ad accesso diretto e servizio web
- 8. Accesso al servizio Web da GWT
- 9. Accesso a FacesContext dal servizio Web
- 10. Servizio Web SOAP .NET restituisce JSON
- 11. Chiamare servizio Web .NET con Android
- 12. Oggetto persistente in C#. NET Servizio Web
- 13. Servizio Web .NET (asmx) Problema di timeout
- 14. Connessione al servizio Web SAP dall'applicazione C# .NET
- 15. Sitecore Lucene: re-index bambino (o padre) articoli sull'aggiornamento voce
- 16. Sitecore 8, .NET 4.6, bundle Restituzione 404
- 17. web client per servizio web
- 18. Accesso all'API del servizio Web di Salesforce mediante C#
- 19. Accesso alle stringhe di connessione tramite un servizio Web
- 20. Come accedere a Sitecore Lucene Ricerca tramite l'API Web articolo?
- 21. Come chiamare un servizio Web senza wsdl in .net
- 22. Come chiamare un servizio Web .NET da Android?
- 23. Come creare un'interfaccia web per un servizio Windows in .Net?
- 24. Perché Sitecore pubblica articoli bozza dall'API C# e come posso smettere di farlo?
- 25. Best practice Sitecore
- 26. Sitecore 6.5 con MVC3
- 27. Accesso alla porta seriale via php
- 28. Accesso alle celle DataGridView via White
- 29. di accesso pubblico .net
- 30. Mini Web Server per .NET
non sono sicuro che sia possibile. Un Sitecore.Data.Items.Item è molto robusto (leggi: pieno di metodi che fanno più chiamate DAL Sitecore) e in realtà non è adatto per essere restituito da un servizio web. Perché stai facendo questo? Forse c'è un'implementazione più semplice? – EliThompson
Sono decisamente aperto a qualcosa di più semplice. Fondamentalmente ho un numero di elementi di contenuto in Sitecore che devono essere visualizzati in un'applicazione Coldfusion. Nel mio caso particolare ho tutti i miei articoli di notizie su Sitecore, ma ci sono un certo numero di applicazioni Coldfusion che, in un modo o in una forma, estraggono le notizie. – Kyle
un sacco di opzioni offerte per rispondere a questo Q, ma non abbastanza chiaro feedback per dare all'uomo una buona risposta. – techphoria414