cancel
Showing results for 
Search instead for 
Did you mean: 

WCF - alfresco web services

batdan
Champ in-the-making
Champ in-the-making
Salve a tutti.
Ho trovato tantissimi post relativi a questo argomento, tutti con varie risposte, ma nessuno con un esempio allegato.
Io sono riuscito a richiamare solo il servizio web dell'autenticazione (unico che non richiede lo username token). Mentre gli altri li riesco a chiamare solo con WSE.
Qualcuno di voi sà o per caso ha un esempio di come richiamare i web service (ad esempio quello del repository) di alfresco utilizzando WCF (windows communication foundation)?
dan
10 REPLIES 10

mturatti
Champ in-the-making
Champ in-the-making
Non sono un esperto di .NET, ma credo che da WCF sia piuttosto semplice invocare un servizio REST

http://msdn.microsoft.com/en-us/netframework/cc950529.aspx

Siccome Alfresco espone praticamente tutto via REST, il resto dovrebbe venire da se.

Per capire cosa è disponibile via REST in Alfresco e vedere degli esempi, puoi partire da:
http://wiki.alfresco.com/wiki/HTTP_API

Esempi di integrazione tra .NET ed Alfresco sono presenti nel capitolo 5 del libro:
https://www.packtpub.com/alfresco-3-web-services-building-applications-using-Webscripts-and-cmis/boo...

batdan
Champ in-the-making
Champ in-the-making
Certamente è possibile fare chiamate a servizi REST (anche perchè i webscript che alfresco mette a disposizione, sono limitati). Pero' io intendevo proprio chiamate ai web service (wsdl) alfresco utilizzando WCF.
grazie

batdan
Champ in-the-making
Champ in-the-making
Questo è quanto scritto nel wiki. Ma sfortunatamente funziona, come dicevo nel primo post, solo per i servizi web che non richiedono lo username token (ws-security), ad esempio authentication-service.wsdl (unico esempio riportato nel wiki). Per gli altri, ad esempio repository-service.wsdl e content-service.wsdl, le chiamate vanno in errore.
Purtroppo sembra che per poter far funzionare le chiamate ad alfresco con WCF, bisognerebbe far funzionare questi web service su HTTPS (SSL).

Ecco perchè chiedevo qualche esempio.

openpj
Elite Collaborator
Elite Collaborator
Non conosco WCF ma credo che il problema non sia HTTPS, che in ogni caso sarebbe configurabile come ogni altra web application e quindi applicabile.

Per poter richiamare via SOAP Alfresco è necessario rispettare lo standard WS-Security quindi fare in modo che la chiamata SOAP abbia un messaggio con un SOAP Header correttamente impostato. Altrimenti Alfresco non procede con l'esecuzione della chiamata. Questo sia in HTTP che in HTTPS, in parole povere non dovrebbe dipendere da SSL.

mturatti
Champ in-the-making
Champ in-the-making
Concordo con OpenPJ, HTTPS non c'entra nulla: WS-Security è indipendente dalla sicurezza di canale.
Consiglio di fare dei test con un client alternativo, tipo SoapUI, verificando che i token di WS-Security siano sempre trasferiti.

Io un tempo, per verificare WS via .NET, usavo http://webservicestudio.codeplex.com/ ma non so a che punto sia il progetto adesso.

batdan
Champ in-the-making
Champ in-the-making
Anche io concordo, ma il problema è che via WCF il web service del repository non si riesce a chiamare.
Se qualcuno ci riesce, sarebbe lieto ricevere da parte mia l'esempio di codice o configurazione.
Grazie

rat8602
Champ in-the-making
Champ in-the-making
qualcuno è riuscito a utilizzare WCF per il repository??

openpj
Elite Collaborator
Elite Collaborator
Allora è appurato che non è un problema di Alfresco o di WCF, è un problema di utilizzo corretto del layer WS-Security che va impostato a livello di stub client Web Service.

Alfresco ha adottato questo standard per poter fare in modo di utilizzare un'unica sessione di autenticazione per poter eseguire n operazioni utilizzando la SOAP API.

La specifica di questo standard è definita nel documento rilasciato da OASIS a questo indirizzo:
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf

Per poter fare in modo di decorare opportunamente con WS-Security l'header SOAP con WCF potete seguire le indicazioni in questa pagina di TheServerSide:
http://www.theserverside.net/tt/articles/showarticle.tss?id=SecuringWCFService

Precisamente bisogna essere sicuri che l'header SOAP sia decorato con l'esempio che vedere nella Table 11, per comodità lo riporto anche quì:

<s:Envelope xmlns:s="…">
    <s:Header>
      <o:Security s:mustUnderstand="1" xmlns:o="…">
        <u:Timestamp u:Id="uuid-c16f2bd1-…">
          <u:Created>2005-10-26T23:56:27.109Z</u:Created>
          <u:Expires>2005-10-27T00:11:27.109Z</u:Expires>
        </u:Timestamp>
        <o:UsernameToken u:Id="uuid-060c77ce-…">
          <o:Username>Softwaremaker</o:Username>
          <o:Password o:Type="…">SomePassword</o:Password>
        </o:UsernameToken>
      </o:Security>
    </s:Header>

Di default WCF inserisce solamente l'elemento XML Timestamp, ma senza aggiungere l'elemento UsernameToken che invece è fondamentale per poter richiamare in questo caso Alfresco, ma questo accade anche per poter richiamare altri prodotti Enterprise.

Spero vi possa essere utile per risolvere i problemi su WCF.