Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Generelt for .NET Standard og WCF, bliver det der før blev konfigureret i app.config, nu konfigureret i kode.

Her er et eksempel på en client der er generet som en WCF service reference, som konfigurers i kode i stedet for gennem app.config:

Code Block
languagec#
CustomBinding binding = new CustomBinding();
binding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11WSAddressingAugust2004, Encoding.UTF8));
binding.Elements.Add(new HttpTransportBindingElement());

 var client = new NSTWsProvider.NtsWSProviderClient(binding, new EndpointAddress("https://test1-cnsp.ekstern-test.nspop.dk:8443/nts/service"));

client.Endpoint.EndpointBehaviors.Add(new SealEndpointBehavior());
client.Endpoint.EndpointBehaviors.Add(new ViaBehavior(new Uri("http://test1.ekstern-test.nspop.dk:8080/sosigw/proxy/soap-request")));

 var dgwsHeader = new Header()
{
    SecurityLevel = 4,
    SecurityLevelSpecified = true,
    Linking = new Linking { MessageID = Guid.NewGuid().ToString("D") }
};

 using (new OperationContextScope(client.InnerChannel))
{
    // Adding seal-security and dgws-header soap header
    OperationContext.Current.OutgoingMessageHeaders.Add(new IdCardMessageHeader(sealCard));
    OperationContext.Current.OutgoingMessageHeaders.Add(HeaderFromXml(dgwsHeader));
     // Throws Exception if not succesful. 
    return client.invokeAsync("test");
}



5.0.0 kræver ikke nær så meget konfiguration som ældre Seal.NET versioner, da meget konfiguration nu håndteres internt af biblioteket.
Det medfører derudover, at det nu fremgår af metode-signaturen hvis man skal tage stilling til en konfiguration.

...

Seal.NET indeholder en række IEndPointBehavior-klasser som kan benyttes af WCF service references.

XmlMessageHeader

Den Gode Webservice specificerer en ekstra headertype, som kan indsættes ud fra XML med XmlMessageHeader. Den kan tilsvarende indsætte Medcom-header data som XML.

XmlMessageHeader implementer System.ServiceModel.Channels.Message fra https://www.nuget.org/packages/System.ServiceModel.Primitives/, så den kan bruges med WCF Service references.

XmlMessageHeader indeholder en static constructor metode, HeaderFromXml, til at lave instanser af den.

-klasser som kan benyttes af WCF service references.

Klienter

Saml2SosiStsClient

Konverter en SAML assertion til et ID kort.

Eksempel:Eksempel

Code Block
languagec#
using static dk.nsi.seal.MessageHeaders.XmlMessageHeader;

var response = Saml2SosiStsClient.ExchangeAssertion(clientCertificate, new Uri("http://test2..

reply.Headers.Add(HeaderFromXml(header));

Klienter

Saml2SosiStsClient

ekstern-test.nspop.dk:8080/sts/services/OIOSaml2Sosi"), nemidAssertion, authorizationCode);

Soisi2SamlStsClient

Konverterer et ID kort til en SAML assertion,  enten via direkte kald til STS eller via SOSI GatewayKonverter en SAML assertion til et ID kort.

Eksempel:

Code Block
languagec#
using dk.nsi.seal;

var response = Saml2SosiStsClientSosi2SamlStsClient.ExchangeAssertion(clientCertificate, new Uri("http://test2test1.ekstern-test.nspop.dk:8080/sts/services/OIOSaml2Sosi"), nemidAssertion, authorizationCode);

Soisi2SamlStsClient

Konverterer et ID kort til en SAML assertion,  enten via direkte kald til STS eller via SOSI Gateway.

Eksempel:

Code Block
languagec#
using dk.nsi.seal;

var response = Sosi2SamlStsClient.ExchangeAssertion(clientCertificate, new Uri("http://test1.ekstern-test.nspop.dk:8080/sosigw/proxy/soap-request"), "/ststest", idCard);
var responseXml = response.XAssertion;

// Der findes også et overload der ikke tager et klientcertifikat
Sosi2SamlStsClient.ExchangeAssertion(uri, "/ststest", idCard);

ID kort

...

/sosigw/proxy/soap-request"), "/ststest", idCard);
var responseXml = response.XAssertion;

// Der findes også et overload der ikke tager et klientcertifikat
Sosi2SamlStsClient.ExchangeAssertion(uri, "/ststest", idCard);

ID kort


IdCard indpakker svaret fra en STS (assertion) og giver mulighed for at benytte data i fremtidige kald.

Image Added

IdCard er en abstract klasse, som implementeres af SystemIdCard og UserIdCard, som hhv. repræsenter enten et system eller en bruger.

MessageHeaders

Image Added
IdCardMessageHeader benyttes til at udstille et IdCard som en WCF MessageHeader.

XmlMessageHeader

Den Gode Webservice (DGWS) specificerer en ekstra headertype baseret på XML, som kan indsættes ud fra et objekt der serialiseres til XML med XmlMessageHeader.

XmlMessageHeader implementer System.ServiceModel.Channels.Message fra https://www.nuget.org/packages/System.ServiceModel.Primitives/, så den kan bruges med WCF Service references.

XmlMessageHeader indeholder en static constructor metode, HeaderFromXml, til at lave instanser af den.

Eksempel:

Code Block
languagec#
using static dk.nsi.seal.MessageHeaders.XmlMessageHeader;

...

reply.Headers.Add(HeaderFromXml(header));


I nedestående eksempel er dk.nsi.seal.dgwstypes.Header og NSTWsProvider.NtsWSProviderClient genereret af en WCF service reference:

Code Block
languagec#
var client = new NSTWsProvider.NtsWSProviderClient(binding, new EndpointAddress("https://test1-cnsp.ekstern-test.nspop.dk:8443/nts/service"));

IdCard er en abstract klasse, som implementeres af SystemIdCard og UserIdCard, som hhv. repræsenter enten et system eller en bruger.

MessageHeaders

Image Removed
IdCardMessageHeader benyttes til at udstille et IdCard som en WCF MessageHeader.
XmlMessageHeader indeholder tilsvarende et XML element, som kan tilføjes som en WCF MeassageHeader.

Da DGWS baserer sig på XML, kan XmlMessageHeader.HeaderFromXml bruges til at indsætte en DGWS header genereret af en WCF service reference.

Eksempel:

Code Block
languagec#
var dgwsHeader = new dk.nsi.seal.dgwstypes.Header()
{
    SecurityLevel = 4,
    SecurityLevelSpecified = true,
    Linking = new Linking { MessageID = Guid.NewGuid().ToString("D") }
};

using (new OperationContextScope(client.InnerChannel))
{
    // Adding seal-security and dgws-header soap header
    OperationContext.Current.OutgoingMessageHeaders.Add(new IdCardMessageHeader(sealCard));
    OperationContext.Current.OutgoingMessageHeaders.Add(HeaderFromXml(dgwsHeader));

    return client.invokeAsync("test");
}

...