Avatar billede krukken Mester
14. august 2004 - 19:43 Der er 32 kommentarer og
1 løsning

Problemer med Webservice

Problemer med wsdl.exe  100 point fra krukken 



X Jeg er ved at lave oprette forbindelse til en webservice hos cvr. I den forbindelse har jeg hentet CVR.wsdl hos CVR.dk.

Når jeg oversætter denne .wsdl fil med: wsdl.exe CVR.wsd
l /language:CS /out:CVRWebService.cs

Får jeg følgende resultat:
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 1.1.4322.573]
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.

Schema validation warning: Namespace 'http://rep.oio.dk/cvr.dk/xml/schemas/Produ
ctionUnit/2002/07/03' is not available to be referenced in this schema.
Schema validation warning: Namespace 'http://rep.oio.dk/cvr.dk/xml/schemas/Legal
Unit/2002/07/03' is not available to be referenced in this schema.
Schema validation warning: Namespace 'http://rep.oio.dk/cvr.dk/xml/schemas/Produ
ctionUnits/2002/07/03' is not available to be referenced in this schema.
Writing file 'CVRWebService.cs'.

Hvad betyder det? Og hvordan retter jeg det? Problemet er at jeg ikke kan på den dannede fil til at opretter forbindelse, og jeg tror efterhånden kun at fejlen ligger her.

Hjælp hjælp

P.S Jeg vidste ikke lige hvor jeg skal oprette spørgsmål - så det skete her:-)
Avatar billede arne_v Ekspert
14. august 2004 - 19:59 #1
Avatar billede arne_v Ekspert
14. august 2004 - 20:15 #2
Jeg er ikke så overbevist om at de warnings betyder noget.

Hvis du laver et eksempel ligesom det i linket - hvilken fejl får du så ?

(jeg kan ikke selv prøve da jeg ikke har username/password)
Avatar billede krukken Mester
14. august 2004 - 20:53 #3
Ja - jeg har nemlig læst at det dokumentation igennem som jeg har kunnet findet. Men hvis du have en cvr.wsdl fil - hvordan ville du så få dannet den .cs fil? Det er vel de rigtige program jeg bruger. Altså wsdl.exe?
Avatar billede arne_v Ekspert
14. august 2004 - 20:55 #4
Jep. Dit eksempel er helt som jeg ville gøre det. Og helt som
deres eget eksempel (bortset fra at de bruger VB.NET ikke C#).

Men hvilken fejl får du når du kører ?
Avatar billede krukken Mester
14. august 2004 - 20:56 #5
når jeg forsøger at oprette forbindelsen bliver der kastet en exception med teksten: "The underlying connection was closed. Could not establish trust relationship with remote server"
Avatar billede arne_v Ekspert
14. august 2004 - 20:58 #6
Ah.

Lyder som at du har problemer med HTTPS og certifikat !

Har du en:

internal class MySecurityPolicy : ICertificatePolicy
{
    public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb)
    {
        return true;
    }
}

og

ServicePointManager.CertificatePolicy = new MySecurityPolicy();

?
Avatar billede krukken Mester
14. august 2004 - 21:03 #7
Jeg har læst http://cvr.dk/brugerdokumentation.doc. Noget der stod noget om et eller andet certifikat. Men jeg har ikke håndteret det. Hvordan gør man det? Min kode indtil nu ser således ud:
CVRWebService cvrws = new CVRWebService();
getLegalUnit unit = new getLegalUnit();
getLegalUnitResponse response = new getLegalUnitResponse();
unit.Password = password;
unit.UserID = username;
unit.Level = niveau;
response = cvrws.getLegalUnit(unit);
this.firmname = response.LegalUnit.LegalUnitNameInfo.LegalUnitName;

Hvad skal der ændre?
Avatar billede arne_v Ekspert
14. august 2004 - 21:06 #8
Sæt den her linie ind øverst i dit program:

ServicePointManager.CertificatePolicy = new MySecurityPolicy();

og put den her klasse ind i din fil:

internal class MySecurityPolicy : ICertificatePolicy
{
    public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb)
    {
        return true;
    }
}
Avatar billede arne_v Ekspert
14. august 2004 - 21:06 #9
Og:

using System.Net;
using System.Security.Cryptography.X509Certificates;
Avatar billede arne_v Ekspert
14. august 2004 - 21:07 #10
Det der er i dokumentet er en beskrivelse af hvordan du importerer deres certifikat.

Min kode siger bare at alle certifikater er OK.

Men hvis du kan få det til at virke så kan du jo nørkle med certifikater senere.
Avatar billede krukken Mester
14. august 2004 - 21:08 #11
Må jeg spørge om hvad det betyder og hvorfor det så skulle virke?:-)
Avatar billede krukken Mester
14. august 2004 - 21:10 #12
A namespace does not directly contain members such as fields or methods

Dette giver før nævnte fejl: ServicePointManager.CertificatePolicy = new MySecurityPolicy();
Avatar billede arne_v Ekspert
14. august 2004 - 21:11 #13
Du kender sikkert godt det at du i browseren connecter til en web server med
en HTTPS URL, så popper der et lilel vindue op, som fortæller dig at din
browser ikke kender certifikatet og spørger om du vil fortsætte. Så klikker
man ja og kører videre.

Den kode er "klik fortsæt til den popup" programmatisk.
Avatar billede arne_v Ekspert
14. august 2004 - 21:12 #14
Har du de 2 using jeg nævner 21:06:56 ?
Avatar billede krukken Mester
14. august 2004 - 21:12 #15
Hvor kan jeg læse om disse certifikater - og hvad betyder det at jeg siger ja til alle certifikater? Er det et sikkerhedsbrist?
Avatar billede krukken Mester
14. august 2004 - 21:13 #16
Jeps - dem har jeg med.
Avatar billede arne_v Ekspert
14. august 2004 - 21:16 #17
Det betyder vel at hvis CVR glemmer at betale for deres domain og nogen andre
overtager det og de sætter en helt ekvivalent web service op, så opdager
du det ikke fordi din applikation ikke checker om det er CVR i den anden ende
https://online.cvr.dk/.

Sikkerheds risiko: ja. Men meget lille.
Avatar billede arne_v Ekspert
14. august 2004 - 21:17 #18
Du har ikke fået den linie anbragt udenfor klassen ?
Avatar billede krukken Mester
14. august 2004 - 21:20 #19
namespace CVR_Opslag
{
   
    /// <summary>
    /// Summary description for Firm.
    /// </summary>
    ServicePointManager.CertificatePolicy = new MySecurityPolicy();
   
    public class Firm
    {
        internal class MySecurityPolicy : ICertificatePolicy
        {
            public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb)
            {
                return true;
            }
        }
        private string username = "????";
        private string password = "?????";
        private int niveau = 1;
        private string firmname;
Avatar billede arne_v Ekspert
14. august 2004 - 21:21 #20
Flyt:

ServicePointManager.CertificatePolicy = new MySecurityPolicy();

ned som første linie i Main.
Avatar billede arne_v Ekspert
14. august 2004 - 21:22 #21
Flyt

internal class MySecurityPolicy : ICertificatePolicy
        {
            public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb)
            {
                return true;
            }
        }

udenfor class Firm
Avatar billede krukken Mester
14. august 2004 - 21:22 #22
Ville du begynde at implementere så den tjekker for om det er dem i den anden ende?
Avatar billede krukken Mester
14. august 2004 - 21:24 #23
Det giver den samme fejl.
namespace CVR_Opslag
{
   
    /// <summary>
    /// Summary description for Firm.
    /// </summary>
    ServicePointManager.CertificatePolicy = new MySecurityPolicy();
    internal class MySecurityPolicy : ICertificatePolicy
    {
        public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb)
        {
            return true;
        }
    }
    public class Firm
    {
Avatar billede arne_v Ekspert
14. august 2004 - 21:24 #24
Jeg ville uden tvivl gerne først se det virke inden jeg kastede mig over det problem.

Men senere: måske. Det vigtigste er at det er HTTPS username/password ikke
kan opfanges.
Avatar billede arne_v Ekspert
14. august 2004 - 21:25 #25
Du har ikke fået den eksekverbare linie flyttet ned i Main.
Avatar billede krukken Mester
14. august 2004 - 21:31 #26
Jeg har to classer. Denne jeg abejder på som står for kommunikationen med cvr. Også har jeg en som laver en form. Main ligger i den klasse som står for formen. Så form opretter blot et objekt at klassen Firm.

Er det denne ligne som skal ligge i main?
ServicePointManager.CertificatePolicy = new MySecurityPolicy();
Avatar billede arne_v Ekspert
14. august 2004 - 21:43 #27
Linie skal være inden i en metode og skal udføres inden du connecter til
web servicen.

Første linie i Main vil ihvertfald være inden connection.

Men lige ovenover:

CVRWebService cvrws = new CVRWebService();

er vel godt nok.
Avatar billede krukken Mester
14. august 2004 - 21:55 #28
internal class MySecurityPolicy : System.Net.ICertificatePolicy
    {
        public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb)
        {
            return true;
        }
    }

Det hjælp - også har jeg indsat ServicePointManager.CertificatePolicy = new MySecurityPolicy(); i toppen af Firm-contruktoren. Jeg får stadigvæk en exception - men den er på dansk og siger: "brguerid eller password er ikke korrekt!" så mon der ikker hul igennem så:-)
Avatar billede arne_v Ekspert
14. august 2004 - 21:57 #29
Der er lidt mere hul igennem.

Nu skal du bare have et validt brugernavn/password til CVR.
Avatar billede krukken Mester
14. august 2004 - 21:59 #30
Det har jeg - tror jeg da:-) Men jeg tror det er fordi jeg ikke sender et CVR-nummer med. Jeg skriver lige igen når jeg har sidder og leget lidt med det.
Avatar billede arne_v Ekspert
14. august 2004 - 23:19 #31
OK at jeg ligger et svar ?
Avatar billede arne_v Ekspert
20. august 2004 - 19:38 #32
Kommet videre ?
Avatar billede krukken Mester
21. august 2004 - 09:51 #33
Sorry - tak for hjælpen.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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