为什么WSDL类型提供程序不能消除歧义歧义?

时间:2013-11-27 19:46:33

标签: f# wsdl type-providers

#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的端点可以解决问题,但我甚至不知道我是否可能最终需要其他端点。

2 个答案:

答案 0 :(得分:0)

不熟悉架构或类型提供程序,但WSDL标准不支持重载。如果WSDL是在运行时从实现生成的(通常是这种情况),则运行时可能会生成这样的无效WSDL。

答案 1 :(得分:0)

我能够通过使用反射找到我想要调用的方法并动态调用它来解决这个问题。

[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$rtb = New-Object System.Windows.Forms.RichTextBox -property @{
    rtf = $Worksheet.Cells.Item(1,9).Text 
}