我正在嘗試F#中的類型提供程序。我已經使用WsdlService提供商以下列方式取得了一些成功:使用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中發出錯誤消息:
The type provider 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' reported an error: Error: No valid input files specified. Specify either metadata documents or assembly files
此消息是錯誤,因爲該文件很明顯是有效的,如前面的例子所證明的。
我考慮過權限問題,並且從我的用戶文件夾中重複了相同的示例,確保在這兩種情況下都向所有用戶授予完全控制權,並且以管理員身份運行VS。
爲什麼F#編譯器認爲該文件無效?
編輯#1:我已經證實,做同樣的事情對http://gis1.usgs.gov/arcgis/services/gap/GAP_Land_Cover_NVC_Class_Landuse/MapServer?wsdl(USGS與植被有關的API)不起作用,而引用wsdl在線工作正常。
謝謝,這似乎工作!出於好奇,你是怎麼解決問題的?我無法在Google上找到任何解釋'wsdlschema'的內容,並且沒有關於TypeProvider的文檔來告訴您它期望的是什麼。這也不符合其他用戶的體驗,只需提供wsdl即可正常工作。我想我會爲此提出一個錯誤報告。 –
我記得在爲上面鏈接的問題寫回答時通過它。另外你可以直接從代碼中讀取邏輯。請參閱當使用LocalSchemaFile時調用的'else'子句[此處](https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Data.TypeProviders/TypeProvidersImpl.fs#L685) '和'ForceUpdate = false'。你可以看到[這裏](https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Data.TypeProviders/TypeProvidersImpl.fs#L620)'unpackFolder'假定包裝XML存在。 – latkin
而且我不認爲這可能適用於本地的just-WSDL文件。如果你能指出一個例子,會很好奇。它*會*指向URI中的一個* remote * .wsdl - 在這種情況下,會有一些額外的抓取邏輯。 – latkin