我想将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服务?或者我是否需要在服务器端搞乱配置?我无法控制我尝试连接的网络服务,但如果必须,我可以在服务器上调整一些配置文件。
答案 0 :(得分:24)
答案 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的问题通常有一个“迄今为止我尝试了什么”的一部分。这不仅是为了鼓励发布之前的努力,也是为了看看可以提出哪些途径。
这里的一个重要问题是,如果您足够了解(或愿意阅读)添加服务引用功能的工作方式,以便在代码中重现它。 或者,如果您能找到具有适当许可的开源项目来利用它。
答案 3 :(得分:1)
我将提供替代答案,如果您要定位使用身份验证的服务,这将对您有所帮助。就我而言,该服务使用linqpad soap driver尚不支持的Windows Auth。您将使用serviceutil.exe
生成客户端代码,将其编译为程序集,然后创建一个Linqpad查询以使用它。
使用serviceutil.exe http://mylocalsite/myservice.svc
生成服务客户端和配置文件-它应生成一个myservice.cs
文件和output.config
。
将客户端代码编译为程序集:csc myservice.cs /target:library
。您现在应该拥有myservice.dll
。
创建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
的引用。