Me han pasado un servicio web C# asp.net muy simple con su supuesto código fuente, que tiene solo un método público llamado Sync(). Además, se me proporciona un script de Powershell que llama a este método de servicio web como se muestra en el siguiente código:
$ws = New-WebServiceProxy -uri <http://webservice.svc?wsdl> $arg1 = $true $arg2 = $true $ws.Sync([ref] $arg1, [ref] $arg2)Cuando miro el código fuente provisto, el método Sync() no tiene ningún parámetro. Sin embargo, como puede notar, Powershell está llamando al método Sync con dos argumentos.
Y el powershell funciona bien con estos dos argumentos que se pasan. Cuando elimino los argumentos de la llamada, falla diciendo No se puede encontrar una sobrecarga para "Sincronizar" y el recuento de argumentos: "0"
Cuando realizo ingeniería inversa de la DLL implementada usando dotPeek, también muestra el método Sync sin ningún parámetro.
Esto es bastante confuso para mí, ya que esperaba que la llamada de servicio web de PowerShell no tuviera parámetros, por lo que no estoy seguro de por qué se pasan estos parámetros adicionales y la llamada de servicio no se ejecuta sin ellos.
¿Es esto peculiar del servicio web que se llama desde Powershell (que necesitamos pasar parámetros adicionales) o me falta algo obvio? Cualquier puntero muy apreciado.
EDITAR: Agregar la sección wsdl
<wsdl:operation name="Sync"> <soap:operation soapAction="http://tempuri.org/ISyncService/Sync" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation>