【问题标题】:Compile error using F# WsdlService type provider使用 F# WsdlService 类型提供程序编译错误
【发布时间】:2014-02-28 13:05:15
【问题描述】:

我正在 F# 中尝试类型提供程序。我通过以下方式使用 WsdlService 提供程序取得了一些成功:

type ec2 = WsdlService<"http://s3.amazonaws.com/ec2-downloads/ec2.wsdl">

但是当我下载该 wsdl 时,将其重命名为 .wsdlschema 并根据this example 中指定的方法将其作为本地模式提供:

type ec2 = WsdlService< ServiceUri="N/A", ForceUpdate = false, 
                          LocalSchemaFile = """C:\ec2.wsdlschema""">

Visual Studio 发出错误消息:

类型提供者 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' 报错:错误:没有指定有效的输入文件。指定 元数据文档或汇编文件

这个消息是错误的,因为文件很明显是有效的,正如前面的例子所证明的那样。

我已经考虑过权限问题,并在我的用户文件夹中重复了相同的示例,确保在这两种情况下都向所有用户授予完全控制权,并以管理员身份运行 VS。

为什么 F# 编译器认为文件无效?

edit #1:我已经确认,对http://gis1.usgs.gov/arcgis/services/gap/GAP_Land_Cover_NVC_Class_Landuse/MapServer?wsdl(与USGS 植被相关的API)做同样的事情也不起作用,而在线引用wsdl 工作正常。

【问题讨论】:

    标签: web-services amazon-ec2 f# wsdl type-providers


    【解决方案1】:

    嗯,看起来类型提供者相当顽固和不灵活,因为它在使用LocalSchemaFile 选项时需要一个真正的“wsdlschema”文档。一个 wsdlschema 文档可以在其中包含多个 .wsdl 和 .xsd 文件,这些文件被包装在一些 XML 中以将它们分开。我猜这是微软工具链中的某种标准东西,但也许其他人(例如亚马逊)不会公开这样的东西。

    TP 尝试做的第一件事是将 wsdlschema 文件解压缩到其单独的部分中,遗憾的是,如果实际上不需要解压缩,它会做错事。然后,当它尝试将 svcutil.exe 指向解压缩的架构文件以执行代码生成时,它会因您看到的错误消息而终止。

    解决方法:将预期的 XML 位添加到您的文件中,它将起作用。

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceMetadataFiles>
      <ServiceMetadataFile name="ec2.wsdl">
    
      [body of your WSDL goes here]
    
      </ServiceMetadataFile>
    </ServiceMetadataFiles>
    

    【讨论】:

    • 谢谢,这似乎有效!出于好奇,您是如何找出问题所在的?我在 Google 上找不到任何解释什么是 'wsdlschema' 的内容,并且没有关于 TypeProvider 的文档可以告诉您它的期望。这也不符合其他用户的体验,仅提供 wsdl 就可以正常工作。我想我会为此提出一个错误报告。
    • 我记得在为您上面链接的问题写我的答案时已经完成了它。另外,您可以直接从代码中读取逻辑。请参阅使用LocalSchemaFileForceUpdate = false 时调用的else 子句here。您可以看到 here unpackFolder 假定存在包装 XML。
    • 而且我不认为这可以与本地的 just-WSDL 文件一起使用。如果你能指出一个例子,我会很好奇。它确实可以指向 URI 中的 remote .wsdl - 在这种情况下,还有一些额外的爬取逻辑。
    • 我在原始帖子中链接到的示例描述只是保存 WSDL 然后将该路径传递给LocalSchemaFile。重新阅读,从@Tomas Petricek 只期望它工作但没有尝试过的语言看来似乎是合理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多