gpt4 book ai didi

web-services - 从 F# 3.0 查询蛋白质数据库

转载 作者:行者123 更新时间:2023-12-04 05:04:16 26 4
gpt4 key购买 nike

practical Haskell example鼓励我安装 Visual Studio 2012 试用版以使用 F# 类型提供程序。但是,我完全不知道如何使用它来解决该问题。有一个RCSB SOAP web service .我复制了 an example (这不起作用,因为 Web 服务 API 已更改)使用来自 RCSB 的 WSDL Web 服务的 URL:

open Microsoft.FSharp.Data.TypeProviders

type pdb = WsdlService<"http://www.rcsb.org/pdb/services/pdbws?wsdl">

do
let ws = pdb.Getpdbws()
ws.getCurrentPdbIds()
|> printfn "%A"

但这在运行时崩溃并出现错误:
Unhandled Exception: System.InvalidOperationException: RPC Message blastPDBRequest1 in operation blastPDB1 has an invalid body name blastPDB. It must be blastPDB1
at System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.OperationReflector.EnsureMessageInfos()
at System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.EnsureMessageInfos()
at System.ServiceModel.Description.XmlSerializerOperationBehavior.CreateFormatter()
at System.ServiceModel.Description.XmlSerializerOperationBehavior.System.ServiceModel.Description.IOperationBehavior.ApplyClientBehavior(OperationDescription description, ClientOperation proxy)
at System.ServiceModel.Description.DispatcherBuilder.BindOperations(ContractDescription contract, ClientRuntime proxy, DispatchRuntime dispatch)
at System.ServiceModel.Description.DispatcherBuilder.ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime clientRuntime)
at System.ServiceModel.Description.DispatcherBuilder.BuildProxyBehavior(ServiceEndpoint serviceEndpoint, BindingParameterCollection& parameters)
at System.ServiceModel.Channels.ServiceChannelFactory.BuildChannelFactory(ServiceEndpoint serviceEndpoint, Boolean useActiveAutoClose)
at System.ServiceModel.ChannelFactory.CreateFactory()
at System.ServiceModel.ChannelFactory.OnOpening()
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ChannelFactory.EnsureOpened()
at System.ServiceModel.ChannelFactory`1.CreateChannel(EndpointAddress address, Uri via)
at System.ServiceModel.ChannelFactory`1.CreateChannel()
at System.ServiceModel.ClientBase`1.CreateChannel()
at System.ServiceModel.ClientBase`1.CreateChannelInternal()
at System.ServiceModel.ClientBase`1.get_Channel()
at Program.pdb.ServiceTypes.PdbWebServiceClient.getCurrentPdbIds()
at Program.pdb.ServiceTypes.SimpleDataContextTypes.PdbWebServiceClient.getCurrentPdbIds()
at <StartupCode$ConsoleApplication2>.$Program.main@() in c:\users\jon\documents\visual studio 11\Projects\ConsoleApplication2\ConsoleApplication2\Program.fs: line 5

还有 SOAP web service正在弃用 a RESTful one .我如何从 F# 3.0 使用它?最简单的工作示例是什么样的?

最佳答案

貌似操作BlastPDB被重载并且 TypeProvider 使用的底层生成代码没有正确支持(它没有在主体名称上放置“1”)。直接使用 Svcutil 时遇到相同问题,请参阅此答案 WCF: Svcutil generates invalid client proxy, Apache AXIS Web Service, overload operations - 此页面显示Type Provider uses svcutil internally .

AFAIK 您将无法使用类型提供程序访问 REST 服务,因为 REST 服务不提供架构(请参阅此答案 F# Type Providers and REST apis)。您可能不得不回退到 REST 客户端库(请参阅此处的一些选项 .NET Rest Client Frameworks )或执行原始 HTTP。

What does the simplest working example look like?



以下是使用 List all current PDB IDs 获取当前 PDB id 列表的简单示例REST API(我相信这相当于您尝试使用 Web 服务进行的调用)。您将需要添加对 System.Net.Http 的引用。
open System.Net.Http
open System.Threading.Tasks

[<EntryPoint>]
let main argv =

use httpClient = new HttpClient()
let task = httpClient.GetStringAsync("http://www.rcsb.org/pdb/rest/getCurrent")
printfn "%s" task.Result

0

关于web-services - 从 F# 3.0 查询蛋白质数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12026328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com