2013-01-17 6 views
5

Ho un file .WSDL dalla nostra società cliente, per il quale devo usare per chiamare un servizio web. Il loro sistema è SAP (SAP PI). La mia applicazione è un client C# .NET 3.5 sviluppato in VS 2008. Ho aggiunto un riferimento al servizio in Visual Studio utilizzando il loro file .WSDL fornito. Questo ha creato per me una classe di riferimento da utilizzare per chiamare il loro servizio e impostare per me diverse associazioni nel file app.config.Incontro di uno schema di autenticazione non autorizzato dal servizio Web

Non ho modificato nulla nel file app.config, ma ho creato codice per chiamare il loro servizio web. Tuttavia, quando chiamo il loro servizio web, ricevo la seguente eccezione:

La richiesta HTTP non è autorizzata con lo schema di autenticazione del client "Anonimo". L'intestazione di autenticazione ricevuta dal server era 'Base realm = "SAP NetWeaver Application Server ..."'.

(ho modificato leggermente la stringa utilizzata nella sezione 'regno di base', in modo da non dare fuori.)

Ha fatto l'app.config non vengono costruite correttamente dal WSDL? Dovrei modificare il file app.config in qualche modo?

Le cose che ho provato:

  • cambiato AuthenticationScheme in app.config da Anonimo a base
    (così come tutti gli altri tipi di autenticazione)
  • cambiato stringa realm in app.config per abbinare il regno nel messaggio di eccezione
  • set username/pw campi nell'oggetto ClientCredentials.Username nel mio codice

Qualsiasi suggerimento o aiuto sarebbe apprezzato.

Edit: Dopo un po 'di più indagini, ho scoperto che Visual Studio ha diversi avvertimenti circa l'elemento di estensione Privacy e Privacy asserzioni: avvertimento strumento

  • personalizzato: Il WSDL opzionale estensione elemento 'politica' da spazio dei nomi' http://schemas.xmlsoap.org/ws/2004/09/policy "non è stato gestito da .
  • Avviso strumento personalizzato: le seguenti Asserzioni politica non sono state importate:
    XPath: // wsdl: definizioni [@ targetNamespace = 'urn: sap-com: document: sap: rfc: funzioni']/wsdl: binding [@ name = 'Binding_FieldValidation'] asserzioni: ...

non ero in grado di scoprire se questo era legato o meno al mio problema corrente con lo schema di autenticazione. Sembra essere correlato, ma non sono stato in grado di trovare alcuna soluzione per ottenere la risoluzione di questi avvisi di politica. Sembra che WCF non gestisca molto bene le dichiarazioni nel wsdl.

risposta

0

La maggior parte dei servizi SAP non supporta l'anonimato. Quindi passare una qualche forma di dati di autenticazione con la chiamata. utente e la password di biglietteria/X.509 ...

Se si inviano i dati di autenticazione con la chiamata alla prova questo

chiedere al ragazzo di SAP per rigenerare il WSDL con Nessun asserzioni SAP, nessuna politica, SOAP 1.1. Puoi anche provare e modificare il WSDL a mano per rimuovere la guff extra ...

0

Come punto di partenza, vorrei verificare che è possibile chiamare il servizio con successo con il nome utente e la password forniti. Utilizzare qualcosa come SoapUI per verificare che tutto funzioni correttamente: basta creare un nuovo progetto, importare il WSDL fornito da SAP PI, impostare nome utente e password ed eseguire la chiamata. Probabilmente otterrai qualche forma di eccezione con un payload vuoto, ma almeno questo verificherà che il nome utente e la password siano corretti.

Una volta verificato che funzioni, verificare che l'applicazione stia chiamando il servizio correttamente e che vengano inviate le intestazioni di autenticazione di base HTTP. È possibile confermare questo utilizzando uno strumento di monitoraggio della rete e controllando che la richiesta http venga generata correttamente. Qualcosa come netcat per Windows può farlo - basta fare in modo che ascolti una porta sul computer locale e quindi specificare localhost e la porta come endpoint SOAP.

Una volta verificato che entrambi sono corretti, la chiamata dovrebbe avere esito positivo.

0

Ci deve essere l'intestazione di autenticazione di base mancante o qualcosa di sbagliato con le credenziali.

SAP PI imposta sempre l'autenticazione di base se un servizio è pubblicato tramite il suo adattatore SOAP. Vorrei verificare se WCF emette realmente quell'intestazione (ad esempio, punta l'endpoint del client al gateway TCP e lascia che il gateway TCP indichi l'endpoint SAP PI dal WSDL).

Informazioni sugli avvisi: AFAIK il WSDL generato da SAP PI conterrà sempre questi tag dei criteri, non è possibile ometterlo. Quello che puoi fare è semplicemente buttarli fuori perché non sono realmente validati

Problemi correlati