F#WsdlService型供应商代理(F# WsdlService type provider p

2019-10-18 15:54发布

我下面的MSDN教程发现WsdlService型供应商在这里 。 当我在家中运行它,它工作正常。 当我写在工作相同的代码,我得到一个设计时异常:

该类型的提供“Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders”报告了一个错误:错误:无法从获得的元数据http://msrmaps.com/TerraService2.asmx?WSDL

工作时使用代理,我要改变从VS2012 C#项目使用WSDL时要使用一个默认代理web.config中。 当我看着该类型提供的参数,我没有看到一个关于代理提。 有没有人有什么建议?

提前致谢。

Answer 1:

我不是通过代理连接,所以我没有实际测试这种方式,但我认为你应该能够使用本地WSDL文件加载在设计类型提供商。

尝试下载(从WSDL模式http://msrmaps.com/TerraService2.asmx?WSDL )和保存,为本地文件(如C:\temp\terra.wsdlschema )。 那么你应该能够编写:

#r "System.ServiceModel.dll"
#r "FSharp.Data.TypeProviders.dll"
open Microsoft.FSharp.Data.TypeProviders

type Terra = WsdlService< ServiceUri="N/A", ForceUpdate = false, 
                          LocalSchemaFile = @"C:\temp\terra.wsdlschema">
let terra = Terra.GetTerraServiceSoap()
terra.GetPlaceList("New York", 1, false)

ServiceUri参数似乎是必需的,但如果添加它应该被忽略ForceUpdate=false 。 它应该只需要缓存的WSDL文件。 我不完全知道如何配置为使用您的配置文件的设置运行,但我敢肯定,这可以以某种方式来完成(或者它只是工作,或者你可以传递一些东西到GetTerraServiceSoap方法)。

可悲的是,类型提供者不知道静态(在设计时)到哪里寻找配置文件,所以它忽略它。



Answer 2:

扩大对托马斯的答案...

这是一个常见的模式内置类型供应商今天:

  1. 在设计时,如果你需要任何种类的非默认配置(例如凭据,代理配置,...)的,该类型的供应商将无法正常工作。 你需要在这个下载一些架构文件在本地(例如,DB模式文件,ODATA $元数据文件,WSDL架构文件...),并指出该型供应商,通常是由路过LocalSchemaFile="...", ForceUpdate=false的静态构造函数。 这喂TP都需要生成类型的信息。
  2. 然后,您可以设置所有非默认配置的编程方式上都为您创建的对象,使一切正常运行时。

下面是另一个例子本质上是相同的问题,在这个模式是用来设置凭据。

在WSDL的情况下,下面是设置代理的编程方法后的,事实(即步骤#2)。 完全由那儿剽窃这个答案 ,这正是你想要的,在C#。 你可能需要用这个有点玩,使其为你工作。

#r "System.ServiceModel.dll"
#r "FSharp.Data.TypeProviders.dll"
open Microsoft.FSharp.Data.TypeProviders

type Terra = WsdlService< ServiceUri="N/A", ForceUpdate = false, 
                          LocalSchemaFile = @"C:\temp\terra.wsdlschema">
let terra = Terra.GetTerraServiceSoap()

let binding = terra.DataContext.Endpoint.Binding :?> System.ServiceModel.BasicHttpBinding
binding.ProxyAddress <- System.Uri("http://127.0.0.1:8888")
binding.BypassProxyOnLocal <- false
binding.UseDefaultWebProxy <- false

terra.GetPlaceList("New York", 1, false)


文章来源: F# WsdlService type provider proxy