mono herramienta WSDL no puede analizar la fuerza de ventas enterprise.wsdl
-
24-09-2019 - |
Pregunta
Alguien sabe por qué esto WSDL no es del agrado de la herramienta WSDL mono? Microsoft analiza. XMethods WSDL línea validador analiza. Mono simplemente no parece que les gusta y no sé lo suficiente como para entender por qué.
# the error
mmcaughan@mmcaughan-dsktop:~/Projects/sftest$ wsdl enterprise.wsdl
Web Services Description Language Utility
Mono Framework v2.0.50727.1433
Hay que algunas advertencias al generar el código:
enterprise.wsdl - Esta referencia web no se ajusta al perfil de WS-I Basic v1.1 R2718: un WSDL: unión en una descripción debe tener el mismo conjunto de WSDL: operaciones como el WSDL: portType a que se refiere. * La unión 'SoapBinding', en la descripción del servicio 'Urn: enterprise.soap.sforce.com'
escribe el fichero 'SforceService.cs'
WSDL partes relevantes (creo)
<!-- Soap PortType -->
<portType name="Soap">
<operation name="login">
<documentation>Login to the Salesforce.com SOAP Api</documentation>
<input message="tns:loginRequest"/>
<output message="tns:loginResponse"/>
<fault message="tns:LoginFault" name="LoginFault"/>
<fault message="tns:UnexpectedErrorFault" name="UnexpectedErrorFault"/>
<fault message="tns:InvalidIdFault" name="InvalidIdFault"/>
</operation>
<!-- Soap Binding -->
<binding name="SoapBinding" type="tns:Soap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="login">
<soap:operation soapAction=""/>
<input>
<soap:header use="literal" message="tns:Header" part="LoginScopeHeader"/>
<soap:body parts="parameters" use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="LoginFault">
<soap:fault name="LoginFault" use="literal"/>
</fault>
<fault name="UnexpectedErrorFault">
<soap:fault name="UnexpectedErrorFault" use="literal"/>
</fault>
<fault name="InvalidIdFault">
<soap:fault name="InvalidIdFault" use="literal"/>
</fault>
</operation>
Solución
Más viejo y más sabio ahora ...
generar el C # desde el WSDL WSDL enterprise.wsdl -n: Sforce -o: SforceService.cs
la XmlAnyElement no puede tener un namspace vacío, así pop SforceService.cs abiertas y quitarlo
este ... [System.Xml.Serialization.XmlAnyElement (Espacio de nombres = "")] pública System.Xml.XmlElement [] Cualquier { obtener { volver this.anyField; } conjunto { this.anyField = valor; } }
se convierte en ... pública System.Xml.XmlElement [] Cualquier { obtener { volver this.anyField; } conjunto { this.anyField = valor; } }
WSDL genera serialización XML contra los miembros privados que no funciona y tiene que ser fijo
Excepción no controlada: System.InvalidOperationException:. LoginScopeHeaderValueField miembro no se encuentra en Sforce.SforceService clase
este ... [System.Web.Services.Protocols.SoapHeaderAttribute ( "LoginScopeHeaderValueField")]
se convierte en ... [System.Web.Services.Protocols.SoapHeaderAttribute ( "LoginScopeHeaderValue")]
buscar y reemplazar campo de Valor "para el campo de Valor"
entonces es posible conseguir esto, que es un fracaso porque mono no instala ningún certificados raíz en el almacén de confianza para HTTPS falla
Excepción no controlada: solicitud por escrito de error: System.NET.WebException La autentificación o descifrado ha fallado. en System.Net.WebConnectionStream.WriteHeaders () [0x00000] en System.Net.WebConnectionStream.SetHeaders (tampón System.Byte []) [0x00000] al (wrapper interacción remota-Invoke-con-check) System.Net.WebConnectionStream: SetHeaders (byte []) en System.Net.HttpWebRequest.SendRequestHeaders (propagate_error Boolean) [0x00000]
Se fija con mozroots que conseguir todos los CERT Mozilla barcos con ...
mozroots --import --sync
A continuación, todo funciona como se describe
Sforce.SforceService unión = new Sforce.SforceService (); Sforce.LoginResult loginResult = binding.login ( "someuser", "somepass"); etc ...