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

时间:2014-07-07 03:49:07

标签: web-services wcf wsdl linqpad

我想将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:Expected一个绝对的,格式良好的http URL,没有查询或片段。参数名称:serviceRoot"。如果我遗漏?wsdl查询,我会收到400 Bad Request响应。

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

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

4 个答案:

答案 0 :(得分:24)

查看以下内容:

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:1)

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

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

我建议您查看writing LINQPad data extentions

答案 3 :(得分:1)

我将提供替代答案,如果您要定位使用身份验证的服务,这将对您有所帮助。就我而言,该服务使用linqpad soap driver尚不支持的Windows Auth。您将使用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的引用。