2010-09-24 23 views
10

Questo è il mio primo tentativo provando ad usare WCF, quindi sto cercando di indovinare che sto facendo qualcosa di sbagliato. Sto cercando di accedere a un servizio di sapone definito dal WSDL in http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1?wsdl sto utilizzando VS2010, e aggiungere un servizio di riferimento per il mio progetto e puntare all'URL lì (o meglio, la nostra intranet installazione di esso), ma quando utilizzo il Visualizzatore oggetti per visualizzare il servizio, le operazioni sull'interfaccia sono TUTTI i metodi void senza parametri. Sembra che WCF non stia leggendo correttamente le informazioni sul tipo. Non dà errori, ma sta dando un sacco di avvertimenti come la seguente:riferimento al servizio WCF genera metodi vuoto da WSDL

Attenzione Attenzione strumento 1 Custom: Guasto chiamato InvalidSessionException in GetPermissions operazione non può essere importati. WSDL non supportato, la parte del messaggio di errore deve fare riferimento a un elemento . Questo messaggio di errore non fa riferimento a un elemento. Se si dispone di modificare accesso al documento WSDL, è possibile risolvere il problema facendo riferimento a un elemento schema utilizzando l' 'elemento' attributo. Z: \ LibreriaProva \ Service Riferimenti \ Confluenza \ Reference.svcmap 1 1 LibreriaProva

Attenzione Attenzione strumento 2 personalizzato: Il WSDL opzionale estensione elemento 'corpo' dal namespace 'http://schemas.xmlsoap.org/wsdl/soap/' non era gestito. XPath: // wsdl: definizioni [@ targetNamespace = 'http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1']/wsdl: binding [@ name = 'confluenceservice-v1SoapBinding']/wsdl: operation [@ name = 'getPermissions']/wsdl: input [@ name = 'getPermissionsRequest'] Z: \ LibreriaProva \ Service Riferimenti \ Confluenza \ Reference.svcmap 1 1 LibreriaProva

che cosa sto facendo di sbagliato? Ho provato a cambiare la configurazione del servizio con una combinazione di opzioni, ma non ho mai potuto inserire correttamente i tipi dal WSDL. Ho assunto che WCF genererà automaticamente le classi di tipi insieme all'interfaccia di servizio. Dovrei capire quali tipi sono in uso nel WSDL e creare da solo le classi e i dati, oppure è qualcos'altro?

risposta

5

Hhmm ... interessante - ho eseguito svcutil.exe dalla riga di comando contro l'URL che hai fornito, e mentre ho un sacco di avvertimenti sui problemi WSDL, io anche ottenere qualche codice - qualcosa come:

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:2.0.50727.4952 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] 
[System.ServiceModel.ServiceContractAttribute(Namespace="http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1", ConfigurationName="ConfluenceSoapService")] 
public interface ConfluenceSoapService 
{ 
    // CODEGEN: Generating message contract since the wrapper namespace (http://soap.rpc.confluence.atlassian.com) of message getPermissionsRequest does not match the default value (http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1) 
    [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] 
    [System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, Use=System.ServiceModel.OperationFormatUse.Encoded)] 
    getPermissionsResponse getPermissions(getPermissionsRequest request); 

    // CODEGEN: Generating message contract since the wrapper namespace (http://soap.rpc.confluence.atlassian.com) of message searchRequest does not match the default value (http://confluence.atlassian.com/rpc/soap-axis/confluenceservice-v1) 
    [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] 
    [System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, Use=System.ServiceModel.OperationFormatUse.Encoded)] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteException))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(Vector))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemotePermission))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteNodeStatus))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemotePageHistory))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteContentPermission))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(AbstractRemotePageSummary))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteSpaceSummary))] 
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(RemoteSearchResult))] 
    searchResponse search(searchRequest request); 

quindi vorrei provare ad usare svcutil.exe dalla riga di comando per generare il file ConfluenceSoapService.cs e quindi utilizzare tale per parlare con il servizio di Confluence.

+1

+1 per suggerire svcutil.exe. – Bernard

+0

Hmm ... sembra che funzioni con svcutil.exe. È davvero strano Grazie comunque. – StarKat99

+0

lavorato anche per me, se si va in Visual Studio menù di avvio c'è uno shortctu per il prompt dei comandi VS che rende svcutil di facile accesso, quindi: 'svcutil.exe http: // somedomain.com/someapi.wsdl' – AaronLS

0

appena incontrato questo problema su JIRA 4.4, e funziona se si utilizza il vecchio riferimento Web invece di un riferimento al servizio.

Per le istruzioni su questa operazione, si veda: Web Reference vs. Service Reference

Questa era la soluzione più semplice per me, perché io so JIRA si sta muovendo verso REST (lontano da SOAP) e sto solo cercando di ottenere rapidamente installato e funzionante.

Problemi correlati