我下面的MSDN教程发现WsdlService型供应商在这里 。 当我在家中运行它,它工作正常。 当我写在工作相同的代码,我得到一个设计时异常:
该类型的提供“Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders”报告了一个错误:错误:无法从获得的元数据http://msrmaps.com/TerraService2.asmx?WSDL
工作时使用代理,我要改变从VS2012 C#项目使用WSDL时要使用一个默认代理web.config中。 当我看着该类型提供的参数,我没有看到一个关于代理提。 有没有人有什么建议?
提前致谢。
我不是通过代理连接,所以我没有实际测试这种方式,但我认为你应该能够使用本地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
方法)。
可悲的是,类型提供者不知道静态(在设计时)到哪里寻找配置文件,所以它忽略它。
扩大对托马斯的答案...
这是一个常见的模式内置类型供应商今天:
- 在设计时,如果你需要任何种类的非默认配置(例如凭据,代理配置,...)的,该类型的供应商将无法正常工作。 你需要在这个下载一些架构文件在本地(例如,DB模式文件,ODATA $元数据文件,WSDL架构文件...),并指出该型供应商,通常是由路过
LocalSchemaFile="...", ForceUpdate=false
的静态构造函数。 这喂TP都需要生成类型的信息。 - 然后,您可以设置所有非默认配置的编程方式上都为您创建的对象,使一切正常运行时。
下面是另一个例子本质上是相同的问题,在这个模式是用来设置凭据。
在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)