Avatar billede CodingJoe Nybegynder
26. september 2011 - 18:37 Der er 10 kommentarer

WCF SOAP Header, hvordan gør man det bedst?

Jeg har før ikke benyttet mig af SOAP headers, og synes det jeg har lavet løser opgaven, men det er ikke pænt.
Klient
using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) {
    string headerIndhold = "<initialer>HPA</initialer><applikation>MinKlientApplikation</applikation><brugerGruppe>Admin</brugerGruppe>";
    MessageHeader<string> message = new MessageHeader<string>(sikkerhed);
    var header = message.GetUntypedHeader("MinHeader", "http://www.mitsite.dk");
    OperationContext.Current.OutgoingMessageHeaders.Add(header);
    //WCF kald
    var req = new MinProxy.HentEnHelMasseCrap();
    req.Id = "21356465-7643";
    var result = client.HentEnHelMasseCrap(req);
}

WCF
MessageHeaders headers = OperationContext.Current.IncomingMessageHeaders;
string headerData = headers.GetHeader<string>("MinHeader", "http://www.mitsite.dk");

Ideen er at jeg vha. linq herefter finder initialer, brugergruppe etc. udfra headeren.

Bør man ikke kunne gøre det mere typestærkt? et eksempel ville være fedt.

-> Arne
Jeg satser på endnu et pletskud fra dig ;)
Avatar billede kelo Nybegynder
27. september 2011 - 09:11 #1
Kan du ikke gøre brug af en datakontrakt istedet for at løse det med egen opbygget soap header?
Avatar billede CodingJoe Nybegynder
27. september 2011 - 11:07 #2
Det kan godt være...det skal kunne kaldes fra en Java klient.
Avatar billede janus_007 Nybegynder
28. september 2011 - 09:38 #3
Jeg har netop løst den slags 3 gange i det forløbne år....

Men Arne, kan du ikke lige overtage her ;-)
Avatar billede CodingJoe Nybegynder
28. september 2011 - 17:27 #4
Janus, du må også meget gerne :)

...det er bare fordi, Arne mange gange er hurtigst på aftrækkeren, men han har vist travlt.
Avatar billede CodingJoe Nybegynder
29. september 2011 - 17:06 #5
->janus_007
Har du ikke et godt eksempel?
Avatar billede arne_v Ekspert
11. oktober 2011 - 04:47 #6
Hvis vi definerer en type staerk losning som en loesning der har en property MinHeader der kan checkes compile time fremfor en string "MinHeader" der checkes runtime, saa kan jeg ikke se at det kan lade sig goere.

Jeg kendte slet ikke OperationContext, saa hvis jeg skulle have loest opgaven havde jeg nok lavet en extension. Men WCF er meget stort, saa ikke noget overraskende i at jeg ikke kender noget indenfor WCF.

Jeg vill nok forsoege at undgaa XML tags i vaerdien.

Og hvis det ikke er muligt, saa ville jeg smaekke namespace paa saaledes at den ikke ender op i et eller andet SOAP namespace.

Det burde ikke vaere et problem at sende det samme med en Java client. Det kan formentligt goeres nemt med en specifik JAX-WS implementation og lidt mere besvarligt via strict JAX-WS.
Avatar billede CodingJoe Nybegynder
13. oktober 2011 - 22:59 #7
Ja, som jeg kiggede på eksemplet her ->
http://www.fasil.dk/post/2011/09/23/WCF-SOAP-Headers.aspx

Så har jeg ikke brug en xml streng, som den der holder værdierne på min header. Derimod har jeg lavet en custom header entitet, som jeg får sat på klient delen og på server siden udvinder jeg så værdierne vha. linq.

tak for kommentarerne :)
Avatar billede CodingJoe Nybegynder
11. januar 2013 - 23:17 #8
Smid et svar ind, Arne.
Avatar billede CodingJoe Nybegynder
04. maj 2013 - 20:03 #9
Bump.
Smid et svar ind, Arne. :)
Avatar billede CodingJoe Nybegynder
22. november 2013 - 22:16 #10
Bump...smid et svar ind mægtige Arne :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester