2012-03-12 7 views

risposta

12

Leggere questo: http://markistaylor.com/2010/09/09/linqpad-beyond-linq/ sembra che si possa fare ciò aggiungendo un riferimento a System.ServiceModel.dll e [Tridion_Home] \ bin \ client \ Tridion.ContentManager.CoreService.Client.dll (in Query -> Proprietà query) a LINQPad.

+0

E il 404 è probabile perché LINQPad sta cercando/$ metadata che non esiste nel CoreService –

+0

Accetto. Ricordare che il servizio principale viene implementato utilizzando WCF 3.5, che utilizza SOAP come predefinito. "Combinare la comunicazione Web-centrica con gli standard SOAP e WS- * in un unico stack di servizio e modello di oggetti è una delle caratteristiche che rende così avvincente WCF in .NET Framework 3.5", http://msdn.microsoft.com/it us/magazine/cc135976.aspx – robrtc

+1

Nota: Tridion.ContentManager.CoreService.Client.dll è disponibile per SDL Tridion 2011 SP1. Dobbiamo generare la dll del client da soli se GA 2011 o Rollup aggiornamento rapido. –

2

È possibile controllare il registro di IIS per il Content Manager - vedete il 404 dal tentativo di connessione LINQPad? La pagina esiste realmente?

12

LINQPad è ormai il mio strumento preferito per l'interazione con Tridion tramite l'API del servizio principale.

Se si dispone solo di download a plain LINQPad, è possibile connettersi ai servizi di dati WCF (in genere noti come origini OData), ai database di SQL Server e al mercato di Azure Data Services. Poiché il servizio principale di Tridion non è di questi tipi, non è possibile creare una connessione persistente ad esso.

Ma è comunque possibile utilizzare LINQPad come alternativa leggera a Visual Studio attenendosi alla seguente procedura:

  1. Switch di LINQPad lingua a "C# Programma"
  2. incolla nel frammento di codice di seguito
  3. Aggiungi il riferimenti DLL necessari dallo snippet di codice
  4. Aggiungere i riferimenti Namespace necessari dallo snippet di codice
  5. Specificare i propri valori per nome host, nome utente e password
  6. scrivere il codice

LINQPad in grado di gestire più lingue. Il valore predefinito è "Espressione C#", il che significa che puoi semplicemente specificare una singola "istruzione" nel pannello del codice. Ciò funziona alla grande quando si lavora con es. Database SQL per i quali è disponibile un driver, ma non abbastanza per l'interazione con il servizio principale di Tridion. Quindi, per prima cosa è necessario passare dalla lingua "Espressione C#" alla lingua "Programma C#" nella barra degli strumenti nella parte superiore della query.

Dopo il passaggio lingua, io di solito comincio con il seguente testo standard

void Main() 
{ 
    // System.Runtime.Serialization.dll 
    // System.ServiceModel.dll 
    // System.Net.dll 
    // Namespaces: 
    // System.Net 
    // System.ServiceModel 
    // Tridion.ContentManager.CoreService.Client 
    var binding = new NetTcpBinding { MaxReceivedMessageSize = 2147483647, ReaderQuotas = new XmlDictionaryReaderQuotas { MaxStringContentLength = 2147483647, MaxArrayLength = 2147483647 } }; 
    var endpoint = new EndpointAddress("net.tcp://<hostname>:2660/CoreService/2011/netTcp"); 
    var DEFAULT_READ_OPTIONS = new ReadOptions(); 

    CoreServiceClient client = new CoreServiceClient(binding, endpoint); 
    client.ChannelFactory.Credentials.Windows.ClientCredential = new NetworkCredential("<username>", "<password>"); 
    try { 
     // TODO: fill in the blanks 
    } finally { 
     if (client.State == CommunicationState.Faulted) client.Abort(); else client.Close(); 
    }  
} 

Dopo incollare questo codice, aprire la finestra Proprietà Query (F4) e aggiungi System.Runtime.Serialization.dll, System.ServiceModel.dll e System.Net.dll alla scheda Riferimenti aggiuntivi. Assicurati di avere una copia di Tridion.ContentManager.CoreService.Client.dll sul tuo computer e aggiungi un riferimento anche a questo.(Puoi trovarlo in Tridion/bin/client sul tuo server)

Aggiungi System.Net, System.ServiceModel e Tridion.ContentManager.CoreService.Client alla scheda Importa spazio dei nomi aggiuntivi.

Modificare i valori <hostname>, <username> e <password> nel codice e verificare se la connessione ha esito positivo.

Dopodiché, completa gli spazi vuoti e inizia a divertirti con l'API del servizio principale.

Si consiglia di mantenere la documentazione dell'API Core Service (in formato CHM) sempre aperta. Con quello aperto ho scoperto che potevo arrivare abbastanza lontano anche senza il completamento automatico. E se si salva la query appena creato, si può facilmente clonare con Ctrl-Shift-C e hanno una query fresco con la lingua, i riferimenti DLL e namespace già compilato.

Aggiornamento

Un modo più semplice connettersi a Tridion da LINQPad è ora documentato qui: https://sdltridionworld.com/articles/sdltridion2011/using_linqpad_with_tridion.aspx

+0

Grandi cose Frank. Ho appena preso a calci le gomme sostituendo TODO con Console.WriteLine (client.GetApiVersion()); Funziona a meraviglia. Ora per alcune query più interessanti! –

+1

Prova questo: 'client.GetListXml ("TCM: 0-8-1", nuova RepositoryItemsFilterData { ricorsiva = true, ItemTypes = new [] {} ItemType.Schema, SchemaPurposes = new [] {SchemaPurpose.Component }} ) .Elements() .Select (olmo => new { ID = elm.Attribute ("ID"). Value, Title = elm.Attribute ("Title"). Value, Fields = stringa .Join (",", client.ReadSchemaFields (elm.Attribute ("ID"). Valore) .Fields.Select (campo => campo.Nome)) }) ' Il modo più rapido per trovare il contenuto modello di un TCM a cui mi collego. –

+0

Buono, Frank. Avevo bisogno di aggiungere alcuni argomenti a ReadSchemaFields per farlo funzionare. Sicuro che hai postato la versione giusta? ReadSchemaFields (elm.Attribute ("ID"). Value, true, null) ha funzionato per me. –

Problemi correlati