【发布时间】:2012-10-19 07:31:02
【问题描述】:
虽然我喜欢 F# 类型提供程序的想法,但我第一次认真尝试使用它们时失败了。
我打算使用 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):警告 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,而且它相当大,里面有很多类型,所以我必须承认我有些懒惰,也没有对其进行修剪。 OTOH,如果我确实知道 WSDL 的哪一部分有问题或造成了这个错误,我当然会把它放在这里。
更改 WSDL 也不是一个选项,所以我主要想知道为什么 F# WSDL 类型的提供程序不能处理这个 (WCF) WSDL,或者我做错了什么。
当被 C# 和 VS2010 中的 svcutil.exe 使用时效果很好。
我已经尝试了 WsdlTypeProvider 的所有参数,它们确实给出了相同的结果(当然 ForceUpdate 除外)。我应该使用 F# 以其他方式使用这些服务吗?
================================================ ================================= 添加信息(因为我是新手,不想回答。不要问为什么:):
谢谢大家的回答/评论。
我确实部分采用了这种方式(手动使用 svcutil)。正如我上面所说的,我尝试手动使用 svcutil,但在编译生成的 C# 代码(在 F# 之外的库中)时它失败了。
也就是说,我做了以下事情:
1) 通过在 VS 2010 GUI 中设置引用来创建合约。这按预期工作
2) 尝试使用命令行中的 svcutil 创建它。然后该文件的编译失败并出现同样的错误。
在我看来,从 cmd-line 在 svcutil 中发生的事情以及从 GUI 添加相同服务时使用 svcutil(或使用的内容)不会生成具有相同参数的代码时会发生什么。我想这部分是由于我尝试使用的是 WCF 服务而不是“干净”的 WSDL/web 服务,并且类型提供程序假定我尝试使用“干净”的 web 服务。
我没有找到任何 svcutil 处理此问题的参数或任何可能的参数组合,并不是说我确实尝试了所有组合排列,而是尝试了可能基于(试图)深入阅读的组合svcutil 的文档(而且我不是从 cmd-line 使用它的新手)。
到目前为止,我得出的结论是 svcutil 的一些“缺失”参数导致了这种情况,并且 F# 类型提供程序没有错。我仍然非常想以某种方式解决它,仍然使用 F# 类型提供程序,但后备是通过 C# 中的 GUI 生成代码,然后再次在 F# 中引用该部分代码。这不是我试图实现的优雅解决方案,因为我确实有很多服务,我非常想创建一种很好的原型设计和测试这些服务的方式。
另一个后备当然也会放弃整个 F# 部分而只进行一些单元测试等,但这又违背了潜入 F# 并同时学习的目的 ;-)
【问题讨论】:
-
“当被 C# 和 VS2010 中的 svcutil.exe 使用时效果很好”。这很有趣。我花了几天时间尝试将类型提供程序与真正的 Web 服务(包括 WSDL)一起使用,但在 F# 示例之外没有任何东西可以工作。所以我很想知道这可能是 F# 特有的问题,而不是一般的 .NET 问题...
-
我肯定地认为这不是一个 .net 问题(它在使用 svcutil 时有效...提供者实现中未考虑 WSDL 的使用。当然也可能是我做错了什么。或所有的组合。 “很好”听到其他人在使用它时遇到了问题。您在尝试使用 WsdlProviders 时遇到了哪些错误?它也是 WCF 服务还是以其他方式创建的服务?
-
在 VS2010 GUI 中添加引用时效果很好。如果从 cmd-line 使用 svcutil,如果从服务描述生成文件到 CS 文件,它会产生相同的错误。
-
如果没有看到确切的 C# 和确切的 F# 代码,很难说“这在 C# 中有效,但在 F# 中失败”。如果有任何方法可以用两种语言发布一小部分代码来演示该问题,那将非常有帮助。说两种不同语言的代码相同是很长的一段话。
-
是什么阻止您发布 WSDL?默默无闻的安全性?
标签: wcf f# wsdl svcutil.exe type-providers