单声道的WSDL和F#TypeProviders

时间:2016-03-30 16:44:22

标签: f# mono wsdl fsharp.data.typeproviders

在使用JSON的几个不同项目中使用FSharp.Data TypeProviders之后,我一直在寻找类似的方法来使用基于WSDL的服务。看到this例子我很有希望。不幸的是,在Mac上使用mono不起作用。

是否有任何错误的替代方案或解决方案

"The type provider 
'FSharp.Data.TypeProviders.DesignTime.DataProviders' reported an error: 
The .NET SDK 4.0 or 4.5 tools could not be found (FS3033)"

1 个答案:

答案 0 :(得分:2)

以下内容是对mono的知识很少,但对这个WSDL类型提供者有一些了解。我经常使用它,并且在所有怪癖中都有一些经验,包括阅读它的来源,试图了解发生了什么,不时发生在哪里以及为什么。还添加了一些svcutil工具的一般知识,以及这个子工具的错误和缺陷。

我想这里的主要问题是单声道上svcutil的“路径”是错误的,或者svcutil完全丢失了。或者是这个问题的排列,比如缺少一些用于指向svcutil路径的注册表项。

另一方面,我认为svcutil也应该在单声道上可用。

WSDL提供程序是一种非擦除类型提供程序,它通过使用svcutil生成代码然后对其进行编译来生成代理。确保你有svcutil可用,然后确保它在路径/注册表/任何,可能会帮助你。否则,我99%肯定,你不能在单声道上使用这种类型的提供商。这里不确定的部分是你在Windows环境中生成一个库,然后在单声道中重用这个可能有用的dll。

查看github上的来源:https://github.com/fsprojects/FSharp.Data.TypeProviders/blob/master/src/FSharp.Data.TypeProviders/Util.fs#L106(106行++) 和 https://github.com/fsprojects/FSharp.Data.TypeProviders/blob/master/src/FSharp.Data.TypeProviders/TypeProviders.fs(使用SvcUtil的部分) 您可能会知道SvcUtil.exe在正确的路径上可用的位置,方法和内容,但您可能会知道。

https://github.com/fsprojects/FSharp.Data.TypeProviders/blob/master/src/FSharp.Data.TypeProviders/Util.fs#L82确实引用了一些注册表项,并添加了一些硬编码的路径。

希望通过确保你真正拥有“正确”路径的svcutil来为你解决这个问题......

我不喜欢这种对svcutil的依赖(它也有点我 grrr ),或类型提供者中的其他外部工具,一般来说,希望某种灵魂会开始执行任务在某个时候重写这个。