Posso aggiungere un'intestazione SOAP personalizzata nei messaggi in entrata/uscita WCF in basicHttpBinding, come se fosse possibile aggiungere un'intestazione di autenticazione personalizzata nei servizi Web ASMX? Tali intestazioni SOAP personalizzate devono essere accessibili utilizzando i client di servizio Web .net 2.0/1.1 (accessibili dallo strumento WSDL.EXE).Come aggiungere intestazioni di sapone personalizzate in wcf?
risposta
Controlla il WCF Extras su Codeplex - è una libreria di estensioni facile per WCF che offre, tra le altre cose, intestazioni SOAP personalizzate.
Un'altra opzione è quella di utilizzare WCF message contracts nel servizio WCF; in questo modo è anche possibile definire e impostare le intestazioni SOAP WCF.
[MessageContract]
public class BankingTransaction
{
[MessageHeader]
public Operation operation;
[MessageHeader]
public DateTime transactionDate;
[MessageBodyMember]
private Account sourceAccount;
[MessageBodyMember]
private Account targetAccount;
[MessageBodyMember]
public int amount;
}
Qui "l'operazione" e "transactionDate" sono definiti come intestazioni SOAP.
Se nessuno di questi metodi è di aiuto, è necessario verificare il concetto di Message Inspector WCF che è possibile scrivere come estensioni. Ti consentono di es. inserire determinate intestazioni nel messaggio su ogni chiamata in uscita sul client e recuperarle dal messaggio sul server per l'uso.
Vedere questo post del blog Handling custom SOAP headers via WCF Behaviors per un punto di partenza su come scrivere un ispettore di messaggi e come includerlo nella configurazione del progetto.
Il lato client IClientMessageInspector
definisce due metodi BeforeSendRequest
e AfterReceiveReply
mentre il lato server IDispatchMessageInspector
ha metodi opposti, cioè AfterReceiveRequest
e BeforeSendReply
.
Con questo, è possibile aggiungere intestazioni a ogni messaggio che passa attraverso il filo (o selettivamente solo a pochi).
Ecco un frammento da un IClientMessageInspector
implementazioni che usiamo per trasmettere automagicamente le informazioni internazionali (lingua e informazioni cultura) di fronte client al server - dovrebbe darvi un'idea di come iniziare:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
International intlHeader = new International();
intlHeader.Locale = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
MessageHeader header = MessageHeader.CreateHeader(WSI18N.ElementNames.International, WSI18N.NamespaceURI, intlHeader);
request.Headers.Add(header);
return null;
}
Sul lato server, si dovrebbe quindi verificare la presenza di quelle intestazioni e, se presenti, estrarle dalla busta SOAP e usarle.
UPDATE: va bene, sei clienti sono in .NET 2.0 e non utilizzando WCF - buona notizia è, questo dovrebbe ancora funzionare bene - vedere questo post del blog Custom SOAP Headers: WCF and ASMX per i dettagli. È comunque possibile utilizzare l'ispettore messaggi sul lato server per sniffare ed estrarre le intestazioni personalizzate inviate dai client .NET 2.0.
Grazie a marc_s, ho provato a noi WCF Extras, ho aggiunto l'attributo "XmlSerializerFormat" al contratto di servizio WCF Extra lanciare un errore durante l'accesso ai servizi. Esiste un'altra soluzione disponibile come WCF Extras? Posso aggiungere MessageContract come attributo a tutti i metodi come ho aggiunto SoapHeader nei servizi ASMX? Il mio requisito è che ho bisogno di inviare alcuni dati (lo stesso dicono username e password) per ogni chiamata al servizio WCF. C'è un modo per implementare questo? – nRk
yah marc_s, sembra fantastico. ma nell'articolo menzionato il client dovrebbe essere in .net 3.0 o successivo ... ma nel mio caso i client sono in .net 2.0 e 1.1. È ancora possibile implementare questo? – nRk
- 1. Impossibile aggiungere intestazioni di richiesta personalizzate in PyQT4
- 2. Intestazioni personalizzate PHP cURL
- 3. Come aggiungere intestazioni personalizzate alla classe SMTP System.Net.Mail?
- 4. Raccolta/elaborazione di intestazioni in server di sapone PHP
- 5. Come utilizzare il servizio Web di sapone WCF in node.js
- 6. Come codificare intestazioni HTTP personalizzate in C#
- 7. Aggiunta di intestazioni HTTP personalizzate utilizzando JavaScript
- 8. AngularJS $ intestazioni personalizzate risorsa
- 9. È possibile aggiungere intestazioni di richiesta personalizzate quando si utilizzano le schede personalizzate di Chrome?
- 10. intestazioni personalizzate tipo bloodhound bloodhound
- 11. Primo contratto XSD - Servizio Web sapone WCF
- 12. Azioni sapone WCF nell'intestazione HTTP o nell'intestazione SOAP?
- 13. Intestazioni personalizzate su Amazon S3
- 14. Aggiungi intestazioni personalizzate utilizzando HttpWebRequest
- 15. Intestazioni richieste HTTP personalizzate in HTML
- 16. Invio di intestazioni personalizzate attraverso RSpec
- 17. SDWebImage e impostazione di intestazioni HTTP personalizzate?
- 18. wsimport non genera codice correlato alle intestazioni di sapone
- 19. Hosting di sapone WCF e punti di appoggio affiancati
- 20. Aggiunta di intestazioni personalizzate nel messaggio di Kafka
- 21. Passaggio di intestazioni di richieste personalizzate in loopback
- 22. Chiamate di client WCF asincroni con intestazioni personalizzate: questo OperationContextScope viene eliminato dall'ordine
- 23. Come si impostano le intestazioni personalizzate globali in Angular2?
- 24. WCF - Credenziali personalizzate e token di sicurezza
- 25. Come impostare intestazioni http personalizzate quando si modifica iframe src?
- 26. Intestazioni di posta personalizzate utilizzando MIME in Java
- 27. iOS; collectionView programmabile con intestazioni personalizzate
- 28. Passa intestazioni HTTP personalizzate a richieste RESTful
- 29. Come ottengo il valore di un colpo di testa di sapone personalizzato in WCF
- 30. ASP.NET MVC OutputCache non memorizza intestazioni personalizzate
aggiornato la mia risposta con informazioni sugli ispettori di messaggi –
aggiornato la mia risposta di nuovo con informazioni sull'interoperabilità ASMX/WCF per quanto riguarda SOAP headesr –
grazie marc_s, questo sembra buono, lo proverò. – nRk