Tom*_*m W 3 f# wsdl web-services amazon-ec2 type-providers
我在F#中尝试使用类型提供程序.我以下列方式使用WsdlService提供程序取得了一些成功:
type ec2 = WsdlService<"http://s3.amazonaws.com/ec2-downloads/ec2.wsdl">
但是当我下载wsdl时,将其重命名为.wsdlschema并根据此示例中指定的方法将其作为本地模式提供:
type ec2 = WsdlService< ServiceUri="N/A", ForceUpdate = false,
LocalSchemaFile = """C:\ec2.wsdlschema""">
Run Code Online (Sandbox Code Playgroud)
Visual Studio发出错误消息:
类型提供程序'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'报告错误:错误:未指定有效的输入文件.指定元数据文档或程序集文件
此消息是错误的,因为该文件非常明显有效,如前面的示例所证明的那样.
我已经考虑了权限问题,并且我在我的用户文件夹中重复了相同的示例,确保在这两种情况下都向所有用户授予完全控制权,以及以管理员身份运行VS.
为什么F#编译器认为该文件无效?
编辑#1:我已经确认做同样的事情不适用于http://gis1.usgs.gov/arcgis/services/gap/GAP_Land_Cover_NVC_Class_Landuse/MapServer?wsdl(USGS植物相关API),而引用wsdl在线工作正常.
嗯,似乎类型提供者相当顽固且不灵活,因为在使用该LocalSchemaFile选项时它需要一个真正的"wsdlschema"文档.wsdlschema文档中可以包含多个.wsdl和.xsd文件,包含在一些XML中以使它们分开.我猜这是微软工具链中的某种标准事物,但也许其他人(例如亚马逊)不会暴露这样的东西.
TP尝试做的第一件事就是将wsdlschema文件解压缩到它的各个部分,遗憾的是,如果实际上没有解压缩,它会做错事.然后,当它试图在解压缩的模式文件中指向svcutil.exe来执行codegen时,会因为您看到的错误消息而死亡.
解决方法:将预期的XML位添加到您的文件中,它将起作用.
<?xml version="1.0" encoding="utf-8"?>
<ServiceMetadataFiles>
<ServiceMetadataFile name="ec2.wsdl">
[body of your WSDL goes here]
</ServiceMetadataFile>
</ServiceMetadataFiles>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |