Skip to content

ACOSAS/svarut-dot-net-eksempel

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

Kodeeksempel - .NET

Generelt

  • Bruk WCF til import av WSDL
  • Sett authenticationScheme til Basic i config: <httpsTransport ... authenticationScheme="Basic" ... />
  • Bytt ut textMessageEncoding i config med mtomMessageEncoding: html<mtomMessageEncoding maxReadPoolSize="211" maxWritePoolSize="2132" messageVersion="Soap12" writeEncoding="utf-8"/>

Konfigurasjon (app.config)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="ForsendelsesServiceV4SoapBinding">
                    <mtomMessageEncoding maxReadPoolSize="211" maxWritePoolSize="2132" messageVersion="Soap12" writeEncoding="utf-8"/>
                    <httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
                                    maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Basic"
                                    bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                    keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                                    realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                    useDefaultWebProxy="true" requireClientCertificate="false" />
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint address="https://test.svarut.ks.no/tjenester/forsendelseservice/ForsendelsesServiceV4"
                      binding="customBinding" bindingConfiguration="ForsendelsesServiceV4SoapBinding"
                      contract="ForsendelsesService.ForsendelsesServiceV4" name="ForsendelsesServiceV4" />
        </client>
    </system.serviceModel>
</configuration>

Sertifikater

Eksempelkoden forventer at private key skal finnes i currentuser=>personal. I administrasjonsgrensesnittet må tilhørende .pem publickey sertifikat lastes opp. Videre må det genereres et .pfx sertifikat som lagres på lokal disk eller i lokal keystore.

Generering av sertifikater ved hjelp av openssl

Generere pem private og public key

openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 999

Generere .pfx

openssl pkcs12 -inkey key.pem -in cert.pem -export -out cert.pfx

Kall av tjenesten fra en testmetode.

        /// <summary>/// Dette eksemplet forutsetter at følgende er gjort:
        /// 1) Har opprettet bruker og service-passord for å kunne sende inn forsendelse til SvarUt
        ///</summary> 
        [TestMethod]
        public void TestAtSendForsendelseReturnererId()
        {
            var forsendelsesService = new ForsendelsesService.ForsendelsesServiceV4Client();

            forsendelsesService.ClientCredentials.UserName.UserName = UserName;
            forsendelsesService.ClientCredentials.UserName.Password = Password;

            string tittel = "Dette er en ukryptert eksempelforsendelse fra .Net  - " + Guid.NewGuid().ToString();
            string id = forsendelsesService.sendForsendelse(ForsendelseUtil.CreateUkryptertForsendelse(tittel));
            Assert.IsNotNull("Id skal ikke være null. Forsendelse feilet.", id);
        }

        /// <summary>/// Dette eksemplet forutsetter at følgende er gjort:
        /// 1) Har opprettet bruker og service-passord for å kunne sende inn forsendelse til SvarUt
        /// 3) Har lastet ned public key fra SvarUt og erstattet filen svarut_public.pem i resources mappen
        /// 4) Orgnr er registrert på mottaker i SvarUt
        ///</summary> 
[TestMethod]
        public void TestAtKryptertSendForsendelseReturnererId()
        {
            // NB: Dette er kun gjort for testing.
            ServicePointManager.ServerCertificateValidationCallback = (obj, certificate, chain, errors) => true;

            // NB: Slå av Expect100Continue. Denne er pr default satt til true og kan føre til problemer.
            ServicePointManager.Expect100Continue = false;

            var forsendelsesService = new ForsendelsesService.ForsendelsesServiceV4Client();

            forsendelsesService.ClientCredentials.UserName.UserName = UserName;
            forsendelsesService.ClientCredentials.UserName.Password = Password;

            string tittel = "Dette er en kryptert eksempelforsendelse fra .Net - " + Guid.NewGuid().ToString();
            string id = forsendelsesService.sendForsendelse(ForsendelseUtil.CreateKryptertForsendelse(tittel));
            Assert.IsNotNull("Id skal ikke være null. Forsendelse feilet.", id);
        }

namespace ForsendelseClientSample.Utils
{
    class ForsendelseUtil
    {
        public static forsendelse CreateKryptertForsendelse(string tittel)
        {
            forsendelse forsendelse = new forsendelse {kryptert = true, tittel = tittel, krevNiva4Innlogging = false, avgivendeSystem = "Avgivende system .Net"};
            forsendelse.dokumenter = new[] {CreateKryptertDokument()};
            forsendelse.mottaker = CreatePrivatPerson();
            forsendelse.printkonfigurasjon = CreatePrintkonfigurasjon();
            return forsendelse;
        }

        public static forsendelse CreateUkryptertForsendelse(string tittel)
        {
            var testForsendelse = new forsendelse { kryptert = false, tittel = tittel, krevNiva4Innlogging = false, avgivendeSystem = "Avgivende system .Net"};
            testForsendelse.mottaker = CreatePrivatPerson();
            var dok = new dokument();
            dok.filnavn = "small.pdf";
            dok.mimetype = "application/pdf";
            dok.data = ForsendelseClientSample.Properties.Resources.small_pdf;
            testForsendelse.dokumenter = new dokument[1] { dok };
            testForsendelse.printkonfigurasjon = CreatePrintkonfigurasjon();

            return testForsendelse;
        }

        public static forsendelse CreateUkryptertForsendelseForOrgnr(string tittel, string orgnr, byte[] dataBytes)
        {
            var testForsendelse = new forsendelse { kryptert = false, tittel = tittel, krevNiva4Innlogging = false, avgivendeSystem = "Avgivende system .Net" };
            testForsendelse.mottaker = CreateOrganisasjon(orgnr);
            var dok = new dokument();
            dok.filnavn = "small.pdf";
            dok.mimetype = "application/pdf";
            dok.data = dataBytes;
            testForsendelse.dokumenter = new dokument[1] { dok };
            testForsendelse.printkonfigurasjon = CreatePrintkonfigurasjon();

            return testForsendelse;
        }

        private static mottaker CreateOrganisasjon(string orgnr)
        {
            return new organisasjon
            {
                orgnr = orgnr,
                adresse1 = "Hakkebakkeskogen 111",
                navn = "Bamsefar",
                postnr = "5236",
                poststed = "RÅDAL"
            };
        }

        private static printkonfigurasjon CreatePrintkonfigurasjon()
        {
            return new printkonfigurasjon
            {
                brevtype = brevtype.APOST,
                brevtypeSpecified = true,
                fargePrint = false,
                tosidig = false
            };
        }

        private static mottaker CreatePrivatPerson()
        {
            return new privatPerson
            {
                fodselsnr = "12345678910",
                adresse1 = "Hakkebakkeskogen 111",
                navn = "Bamsefar",
                postnr = "5236",
                poststed = "RÅDAL"
            };
        }

        public static dokument CreateKryptertDokument()
        {
            dokument dok = new dokument();
            dok.mimetype = "application/pdf";
            dok.filnavn = "test.pdf";
            X509Certificate sertifikat = HentX509Certificate();
            KrypterDokumentMedSertifikat(dok, sertifikat);

            return dok;
        }

        private static void KrypterDokumentMedSertifikat(dokument dok, X509Certificate sertifikat)
        {
            byte[] ukryptertBytes = ForsendelseClientSample.Properties.Resources.small_pdf;
            byte[] kryptertData = CMSDataKryptering.KrypterData(ukryptertBytes, sertifikat);
            dok.data = kryptertData;
        }

        private static X509Certificate HentX509Certificate()
        {
            // svarut_public.pem må lastes ned og erstattes
            X509CertificateParser certParser = new X509CertificateParser();
            X509Certificate certificate = certParser.ReadCertificate(ForsendelseClientSample.Properties.Resources.svarut_public);

            return certificate;
        }
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%