Toon posts:

New-webserviceproxy, cannot convert to type

Pagina: 1
Acties:

Vraag


  • Felicia
  • Registratie: Maart 2001
  • Laatst online: 22:28
Mijn vraag
Ik probeer via Powershell met het new-webserviceproxy een SOAP interface op onze Navision omgeving te benaderen. Ik krijg echter een melding waarvan ik niet kan vinden waar dit hem in zit.
Ik zal de eerste zijn die zegt dat ie niet kan coden maar als ik online zoek naar "New-webserviceproxy cannot convert type" dan kom ik het nodige aan oplossingen tegen maar geen van allen werken voor mij.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Vraag om credentials bij eerste keer starten,
# zet $checkcredential op iets anders dan 1 op opnieuw in te geven
if ($checkcredential -ne 1) {$Credential = Get-Credential 
                             $checkcredential = 1}

    # Geef de URL van de WSDL in, als je een bestand gebruikt niet
    # vergeten de URL 穩n het bestand aan te passen naar de echte
$proxy = New-WebServiceProxy "path\Housing.wsdl" -UseDefaultCredential `
          -Namespace 'housing'

# Definieer overloads
[ref]$var  = New-Object -TypeName housing.realtyObject
[ref]$var2 = New-Object -TypeName housing.Messageinfo
[ref]$var3 = New-Object -Typename Housing.errorInfo

$var.value.realtyObjectNo = "012345" # Provisorische zoekopdracht
 

    # Gebruik $proxy.[commando]
$proxy.findRealtyobject($var,$var2, $var3)



### https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-webserviceproxy?view=powershell-5.1

WSDL

Gebruikte software:
Windows 10/11, Powershell ISE, Microsoft Navision R17 met WSDL van leverancier

Wat ik al gevonden of geprobeerd heb
Ik dacht via Reddit een goed antwoord te hebben dus wat gespeeld met de Namespace en Class maar dit werkt niet. Grote kans dat ik het verkeerd doe maar ik heb echt geen idee meer.

Het grappige is wel, als ik een invoke-webrequest met de juiste XML body doe (zonder poespas, enkel readrealtyObject) dan komt er wel een resultaat; maar ik wil dus niet voor ~60 methods een xml bestand maken -O-

Ik draag een rok, wat is jouw excuus?

Alle reacties


  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 23:34
Sowieso lijkt me dit niet handig:

[ref]$var = New-Object -TypeName housing.realtyObject
[ref]$var2 = New-Object -TypeName housing.Messageinfo
[ref]$var3 = New-Object -Typename Housing.errorInfo

ene keer Housing met hoofdletter, andere keer met h (lowercase)

Hoewel het waarschijnlijk niet case-sensitive is

[Voor 8% gewijzigd door stfn345 op 28-01-2022 18:39]


  • Felicia
  • Registratie: Maart 2001
  • Laatst online: 22:28
Zit wat in maar voor de werking maakt het niet uit. Voor zover ik weet is de namespace arbitrair en blijft deze binnen Powershell en niet hoofdlettergevoelig. Met het aanpassen naar alles kleine letters blijft dezelfde melding komen:
code:
1
2
3
4
5
6
7
8
9
Cannot convert argument "realtyObject", with value: "System.Management.Automation.PSReference`1[housing.realtyObjec
t]", for "findRealtyObject" to type "housing.realtyObject": "Cannot convert the "System.Management.Automation.PSRef
erence`1[housing.realtyObject]" value of type "System.Management.Automation.PSReference`1[[housing.realtyObject, 51
btxfq1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]" to type "housing.realtyObject"."
At C:\Users\keesk\Downloads\WSDL-bulk.ps1:20 char:1
+ $proxy.findRealtyobject($var,$var2, $var3)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

Ik draag een rok, wat is jouw excuus?


  • Felicia
  • Registratie: Maart 2001
  • Laatst online: 22:28
Schaamteloze kick :$

Ik draag een rok, wat is jouw excuus?


  • _H_G_
  • Registratie: September 2002
  • Laatst online: 02-02 10:18
Alledrie die [ref] keywords weghalen en bij de functieaanroep ref keyword bij parameter plaatsen (waar nodig volgens documentatie van findRealtyobject). Al doe ik weinig met powershell :) Maar het lijkt op pointer probleem.

  • Felicia
  • Registratie: Maart 2001
  • Laatst online: 22:28
_H_G_ schreef op maandag 31 januari 2022 @ 15:37:
Alledrie die [ref] keywords weghalen en bij de functieaanroep ref keyword bij parameter plaatsen (waar nodig volgens documentatie van findRealtyobject). Al doe ik weinig met powershell :) Maar het lijkt op pointer probleem.
Ik ben niet zo in het programmeren thuis maar als ik de Overload definitions uitvraag dan zou ik verwachten dat de housing.messageinfo als ref meegegeven moet worden, zo ook de errorinfo
code:
1
2
PS C:\Users\keesk> $proxy.findRealtyObject.OverloadDefinitions
housing.realtyObject[] findRealtyObject(housing.realtyObject realtyObject, [ref] housing.messageInfo messageInfo, [ref] housing.errorInfo errorInfo)


Maar, als ik het als volgt instel:
# Definieer overloads
code:
1
2
3
4
5
6
7
8
9
$var  = New-Object -TypeName housing.realtyObject
[ref]$var2 = New-Object -TypeName "housing.messageInfo"
[ref]$var3 = New-Object -Typename "housing.errorInfo"

$var.realtyObjectNo = "012345" # Provisorische zoekopdracht
 

    # Gebruik $proxy.[commando]
$proxy.findRealtyobject($var,$var2, $var3)


Dan werkt het wel (alleen failt die omdat ie de server niet kan bereiken wat klopt). Laat ik het script nog een keer lopen, dan krijg ik weer dezelfde type conversion melding dus schiet mij maar lek 8)7
Je hebt dus gelijk @_H_G_ maar ik ben niet goed genoeg om 't op te lossen :P

Ik draag een rok, wat is jouw excuus?


  • _H_G_
  • Registratie: September 2002
  • Laatst online: 02-02 10:18
Gaat de conversion dan weer over de eerste parameter? Ik vermoed de tweede, want ik vind het 羹berhaupt vreemd dat powershell niet klaagt over [ref]$var2. Als het niet verkeerd heb, krijg je dan een pointer naar een pointer. En als je in dezelfde omgeving het script nog een keer draait dan wordt het misschien een pointer naar een pointer naar een pointer.. Dat zou je probleem verklaren.

Dus zoiets (weet niet of syntax goed is, maar da's het idee)

code:
1
2
3
4
5
6
7
8
9
$var  = New-Object -TypeName housing.realtyObject
$var2 = New-Object -TypeName "housing.messageInfo"
$var3 = New-Object -Typename "housing.errorInfo"

$var.realtyObjectNo = "012345" # Provisorische zoekopdracht
 

    # Gebruik $proxy.[commando]
$proxy.findRealtyobject($var,[ref] $var2, [ref] $var3)

  • Felicia
  • Registratie: Maart 2001
  • Laatst online: 22:28
_H_G_ schreef op dinsdag 1 februari 2022 @ 07:49:
Gaat de conversion dan weer over de eerste parameter? Ik vermoed de tweede, want ik vind het 羹berhaupt vreemd dat powershell niet klaagt over [ref]$var2. Als het niet verkeerd heb, krijg je dan een pointer naar een pointer. En als je in dezelfde omgeving het script nog een keer draait dan wordt het misschien een pointer naar een pointer naar een pointer.. Dat zou je probleem verklaren.

Dus zoiets (weet niet of syntax goed is, maar da's het idee)

code:
1
2
3
4
5
6
7
8
9
$var  = New-Object -TypeName housing.realtyObject
$var2 = New-Object -TypeName "housing.messageInfo"
$var3 = New-Object -Typename "housing.errorInfo"

$var.realtyObjectNo = "012345" # Provisorische zoekopdracht
 

    # Gebruik $proxy.[commando]
$proxy.findRealtyobject($var,[ref] $var2, [ref] $var3)
Heb even gecheckt maar de var2 en var3 moeten echt met ref gedeclareerd worden:
code:
1
Argument: '2' should be a System.Management.Automation.PSReference. Use [ref].


Ik had sowieso dat de variabelen bij iedere run geschoond worden (ook remove-variable werkt niet). Tenzij een pointer dan actief blijft zou ik verwachten dat dit goed gaat. Maar, ik ben geen .net kenner en als ik me niet vergis is dit gedeelte daarop gebaseerd.

Desondanks wel dank voor je input, ik ga er verder geen tijd meer insteken. Doel heb ik op een andere manier ook weten te bereiken (invoke-webrequest met individuele xml bestandjes). Is wat omslachtiger maar voldoende om de overbrugging naar Swagger uit te zingen :)

Ik draag een rok, wat is jouw excuus?

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee