DaPerché il provider del tipo WSDL non può disambiguare il sovraccarico?
#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
Non importa quello che faccio prestatore tipo di WSDL non può disambiguare la chiamata di funzione:
let svc: DynTypes.eConnectClient = Dynamics.GeteConnectServiceEndpoint()
let svc2 = (Dynamics.GeteConnectServiceEndpoint : unit -> DynTypes.eConnectClient)()
let svc3 = (Dynamics.GeteConnectServiceEndpoint : Address -> DynTypes.eConnectClient)(Address serviceAddress)
Nessuno di loro opere.
Disabilitare gli altri endpoint e lasciare solo quello per eConnectClient risolve il problema, ma non so nemmeno se potrei finire per aver bisogno degli altri endpoint.
Mi sto appoggiando all'idea che questo potrebbe essere un bug nel provider del tipo WSDL. Sembra che se si hanno più endpoint con contratti diversi, il provider del tipo WSDL fornisce tutti i metodi per ciascun endpoint diverso e fornisce sovraccarichi per ciascuno di questi endpoint con tipi di restituzione diversi che corrispondono a tutti gli altri endpoint. –
Qui potrei sbagliarmi, ma penso che C# e F # non consentirebbero sovraccarichi con lo stesso tipo di firma per gli argomenti, anche se i tipi di ritorno sarebbero diversi, tuttavia questo potrebbe essere possibile in .NET framework che il provider di tipo WSDL sembra essere in grado di creare. –
Ho trovato un sacco di problemi come questo quando ho provato il provider del tipo WSDL. IIRC, sono spesso problemi con il generatore di codice C# sottostante piuttosto che su qualcosa di specifico per F # e provider di tipi. –