f# - una - que significa ambigüedad diccionario
¿Por qué no puede el proveedor de tipo WSDL eliminar la sobrecarga de ambigüedad? (2)
No está familiarizado con el esquema o el proveedor de tipos, pero las sobrecargas no son compatibles con el estándar WSDL. Si el WSDL se genera en tiempo de ejecución desde la implementación (como suele ser el caso), el tiempo de ejecución podría generar un WSDL no válido.
De
#r "FSharp.Data.TypeProviders"
#r "System.ServiceModel"
open Microsoft.FSharp.Data.TypeProviders
[<Literal>]
let serviceAddress = "http://localhost/Microsoft/Dynamics/GP/eConnect/mex"
type Dynamics = WsdlService<serviceAddress>
type DynTypes = Dynamics.ServiceTypes.SimpleDataContextTypes
type Address = System.ServiceModel.EndpointAddress
No importa lo que haga El proveedor de tipo WSDL no puede eliminar la ambigüedad de la llamada a la función:
let svc: DynTypes.eConnectClient = Dynamics.GeteConnectServiceEndpoint()
let svc2 = (Dynamics.GeteConnectServiceEndpoint : unit -> DynTypes.eConnectClient)()
let svc3 = (Dynamics.GeteConnectServiceEndpoint : Address -> DynTypes.eConnectClient)(Address serviceAddress)
Ninguno de ellos funciona
Desactivar los otros puntos finales y dejar solo el de eConnectClient resuelve el problema, pero ni siquiera sé si puedo terminar necesitando los otros puntos finales.
Pude superar este problema usando la reflexión para encontrar el método que quería invocar y lo invoqué dinámicamente.
let noteServiceType = typedefof<NoteService>
let creatorMethod =
noteServiceType.GetMethods()
|> Seq.filter (fun staticMethod ->
staticMethod.Name = "GetCustomBinding_IIntakeNoteManager"
&& staticMethod.ReturnType = typedefof<NoteService.ServiceTypes.SimpleDataContextTypes.IntakeNoteManagerClient>
&& staticMethod.GetParameters().Length = 0)
|> Seq.toList
let creatorMethod = creatorMethod |> Seq.head
let client = creatorMethod.Invoke(null, [||]) :?> NoteService.ServiceTypes.SimpleDataContextTypes.IntakeNoteManagerClient