使用?wsdl URI查询将LinqPad连接到WCF Web服务

问题描述 投票:15回答:4

我想将LinqPad连接到WCF Web服务,该服务以http://server.example.com/Product/Service/Version/Soap11?wsdl形式的URI公开其WSDL信息。我可以成功地将此URI添加为Visual Studio WCF Web服务引用,它也可以与WcfTestClient一起使用。

连接到调用方法时,服务的实际端点是http://server.example.com/Product/Service/Soap11

当我尝试将Web服务添加为LinqPad连接时,如果我指定包含?wsdl查询的Web服务的URI,我会收到一条LinqPad错误消息“ArgumentException:期望一个绝对的,格式良好的http URL,没有查询或片段。 name:serviceRoot“。如果我省略了?wsdl查询,我会得到一个400 Bad Request响应。

(当我尝试创建Visual Studio Web服务引用时,我得到相同的400 Bad Request响应,或者将服务添加到WcfTestClient,而不将?wsdl附加到URI)。

我可以在客户端更改任何内容以使LinqPad成功连接到此Web服务吗?或者我是否需要在服务器端搞乱配置?我不控制我正在尝试连接的Web服务,但如果必须的话,我可以在服务器上调整一些配置文件。

web-services wcf wsdl linqpad
4个回答
24
投票

请查看以下内容:

https://github.com/dylanmei/linqpad-soap-driver

它是基于SOAP的Web服务的第三方LINQPad驱动程序。


7
投票

看起来我误解了LINQPad的“添加连接”功能的范围。它仅适用于WCF数据服务(实现OData规范),而不适用于WCF Web服务。 (一般来说,WCF服务和WCF数据服务之间的差异在我之前并不清楚)。

我正在尝试连接的服务是WCF Web服务,但不是WCF数据服务Web服务。事实证明,从LINQPad使用这些Web服务的正确方法是使用svcutil.exe生成代理类代码和配置文件,然后可以通过VS或csc.exe进行编译,然后添加生成的程序集作为LINQPad中的标准汇编参考。然后可以在LINQPad中使用代理类,就像在Visual Studio中使用它们一样。


1
投票

这实际上取决于你的优势所在。根据问题判断并不容易,因为它只描述了运行自动化工具的尝试。在SO的问题通常有一个“迄今为止我尝试了什么”的一部分。这不仅是为了鼓励发布之前的努力,也是为了看看可以提出哪些途径。

这里的一个重要问题是,如果您足够了解(或者愿意阅读)添加服务引用功能的工作方式,以便在代码中重现它。或者,如果您可以找到具有适当许可的开源项目来利用它。

我建议你看看writing LINQPad data extentions


1
投票

如果您的目标是使用身份验证的服务,我会提供一个替代答案。在我的情况下,该服务使用Windows Auth,linqpad soap driver尚不支持。您将使用serviceutil.exe生成客户端代码,将其编译为程序集,然后创建Linqpad查询以使用它。

  1. 使用serviceutil.exe http://mylocalsite/myservice.svc生成服务客户端和配置文件 - 它应该生成myservice.cs文件和output.config
  2. 将客户端代码编译为程序集:csc myservice.cs /target:library。你现在应该有myservice.dll
  3. 创建linqpad查询并进入其属性(F4)。在App.config选项卡中,将自定义路径设置为您的output.config文件。在“其他参考”下,添加对myservice.dll的引用。

您的查询将非常简单,例如:

var client = new MyServiceClient("BasicHttpBinding_IMyService");

var result = client.DoTheThing();

result.Dump();

client.Close();

LinqPad可能会提示您添加对System.Web.Services的引用。

© www.soinside.com 2019 - 2024. All rights reserved.