WsdlService<"http://someurl/some.svc?wsdl">
连接到一个服务(WCF),但是它会崩溃并出现以下错误:“Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders”类型提供程序报告了一个错误:tmp6E6C.cs(9409,26): error CS0644: “System.ComponentModel.PropertyChangedEventHandler”无法派生自特殊类“System.MulticastDelegate”c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll:(与前一个错误相关的符号位置)还有很多其他警告,可能不相关:tmp6E6C.cs(290,28): warning CS0436:“System.Data.DataRowState”类型在“c:\Users\someuser\AppData\Local\Temp\tmp6E6C.cs”中与导入的类型“System.Data.DataRowState”在“c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll”中发生冲突。使用在“c:\Users\someuser\AppData\Local\Temp\tmp6E6C.cs”中定义的类型。tmp6E6C.cs(9427,17):(与前一个警告相关的符号位置)。这是已知的问题吗(;-)),还是我使用方法错误?不幸的是,我不能发布WSDL,而且它相当大,其中包含很多类型,所以我必须承认我有点懒,也没有把它缩小。另一方面,如果我知道哪部分WSDL引起了问题或创建了这个错误,我当然会把它放在这里。更改WSDL也不是一个选项,所以我主要想知道为什么F# WSDL类型提供程序无法处理这个(WCF)WSDL,或者我做错了什么。当被C#和svcutil.exe从VS2010消耗时,它工作得非常好。我尝试了所有的WsdlTypeProvider参数,它们都给出了相同的结果(当然除了ForceUpdate)。我应该用另一种方式使用F#来消耗这些服务吗?===============================================================================添加信息(因为我是新手,不想回答。别问为什么:):谢谢你们所有人的回答/评论。我自己部分地走了这条路(手动使用svcutil)。正如我上面所说,我试图手动使用svcutil,但在生成的C#代码(在F#之外的库中)编译时失败。也就是说,我做了以下事情:1)通过在VS 2010 GUI中设置引用来创建合同。这符合预期2)尝试使用cmd-line中的svcutil创建它。然后,该文件的编译将失败并出现相同的错误。从我的角度来看,从命令行使用svcutil和从GUI添加相同服务时生成的代码参数不同。我猜测这部分是由于我试图消费的是一个WCF服务而不是“干净”的WSDL / webservice,类型提供程序假定我尝试使用一个“干净”的webservice。
我没有找到任何参数能够解决这个问题,也没有找到任何可能的参数组合,虽然我并没有尝试所有的排列组合,但我尝试了一些基于阅读svcutil文档(我不是完全没有使用过它)的可行选项。
到目前为止,我得出的结论是这是svcutil中缺少某些参数引起的,F#类型提供程序并没有错。我仍然非常希望通过某种方式解决此问题,仍然使用F#类型提供程序,但备用方案是在C#中通过GUI生成代码,然后再次在F#中引用该代码部分。这不是我想要实现的优雅解决方案,因为我有很多服务,我非常希望创建这样一个很好的原型和测试服务的方式。
当然,另一个备选方案是放弃整个F#部分,只选择一些单元测试等,但这又违背了潜入F#并同时学习的目的。