5
#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
不管我做什麼,WSDL類提供商不能消除歧義函數調用:
let svc: DynTypes.eConnectClient = Dynamics.GeteConnectServiceEndpoint()
let svc2 = (Dynamics.GeteConnectServiceEndpoint : unit -> DynTypes.eConnectClient)()
let svc3 = (Dynamics.GeteConnectServiceEndpoint : Address -> DynTypes.eConnectClient)(Address serviceAddress)
他們沒有工作。
禁用其他終端並僅保留eConnectClient用於解決問題,但我甚至不知道是否可能最終需要其他終端。
我主要想到這可能是WSDL類型提供程序中的錯誤。看起來,如果您有多個具有不同合約的端點,則WSDL類型提供程序會爲您提供針對每個不同端點的所有方法,但會爲每個具有與所有其他端點匹配的不同返回類型的端點提供重載。 –
我可能在這裏是錯誤的,但我認爲即使返回類型不同,C#&F#也會禁止使用相同類型簽名的重載,但這在.NET框架中可能是WSDL類型提供者能夠實現的生成。 –
當我嘗試WSDL類型提供程序時,發現了一堆這樣的問題。 IIRC,它們通常是底層C#代碼生成器的問題,而不是F#和類型提供程序的特定問題。 –