Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 使用wsdl URI查询将LinqPad连接到WCF webservice_Web Services_Wcf_Wsdl_Linqpad - Fatal编程技术网

Web services 使用wsdl URI查询将LinqPad连接到WCF webservice

Web services 使用wsdl URI查询将LinqPad连接到WCF webservice,web-services,wcf,wsdl,linqpad,Web Services,Wcf,Wsdl,Linqpad,我想将LinqPad连接到一个WCF web服务,该服务以URI的形式公开其WSDL信息http://server.example.com/Product/Service/Version/Soap11?wsdl。我可以成功地将此URI添加为Visual Studio WCF web服务引用,并且它也可以与WcfTestClient一起使用 连接到调用方法时,服务的实际端点是http://server.example.com/Product/Service/Soap11 当我尝试将web服务添加为

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

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

当我尝试将web服务添加为LinqPad连接时,如果我指定web服务的URI(包括
?wsdl
查询),我会收到一条LinqPad错误消息,上面说“ArgumentException:需要一个绝对的、格式良好的http URL,没有查询或片段。参数名称:serviceRoot”。如果我省略了
?wsdl
查询,我会得到一个
400错误请求
响应

(当我尝试创建Visual Studio web服务引用,或将服务添加到WcfTestClient时,我会得到相同的
400错误请求
响应,而不会将
?wsdl
附加到URI)


是否可以在客户端进行任何更改以使LinqPad成功连接到此web服务?或者我需要在服务器端处理配置吗?我无法控制要连接的web服务,但如果必须,我可能可以调整服务器上的一些配置文件。

这取决于您的优势所在。根据这个问题来判断并不容易,因为它只描述了运行自动化工具的尝试。SO的问题通常有“到目前为止我试过什么”部分。这不仅是为了鼓励发帖前的努力,也是为了看看可以建议哪些途径

这里的一个大问题是,您是否足够了解(或愿意深入了解)添加服务引用特性的工作原理,以便在代码中重现它。 或者,如果您可以找到一个具有适当许可的开源项目来利用它


我建议您调查一下。

看起来我误解了LINQPad的“添加连接”功能的范围。它仅适用于WCF数据服务(实现OData规范),一般不适用于WCF web服务。(我以前并不清楚WCF服务与WCF数据服务之间的区别)


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

请查看以下内容:


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

我将提供另一个答案,如果您针对的是使用身份验证的服务,这将有所帮助。在我的例子中,该服务使用的是Windows Auth,但它还不支持。您将使用
svcutil.exe
生成客户机代码,将其编译为程序集,然后创建一个Linqpad查询来使用它

  • 使用
    svcutil.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

    的引用,谢谢!是的,鉴于我现在对LINQPad内置的“WCF数据服务”驱动程序的范围有了更好的了解,看来定制数据上下文驱动程序将是将这些服务公开为LINQPad连接的正确方法。感谢您的推荐。在我自己的回答中,这肯定比手动运行要快。我在一个WCF服务上尝试了这一点,但它没有产生任何结果。我遇到了以下错误:警告>此web引用不符合WS-I基本配置文件v1.1。警告>未找到SOAP 1.1绑定:WS-I的基本概要文件1.1包含实施指南,建议如何将一组核心Web服务规范一起使用以开发可互操作的Web服务。对于1.1概要文件,这些规范是SOAP1.1、WSDL1.1、UDDI2.0、XML1.0和XMLSchema。错误>未生成任何类。>无法创建连接。@MikeK:使用“basicHttpBinding”绑定为我解决了问题,我能够添加服务。另外,请确保从您获得的列表(所有可用绑定)中选择了以“BasicHttpBinding_”开头的绑定。我们的服务在操作签名中有一个MessageHeader参数。使用此驱动程序添加连接时,它会从操作签名中忽略这些MessageHeader参数。关于如何解决这个问题有什么想法吗?这是一个有趣的方法。为什么不以WCF测试客户机的方式连接呢?如果我理解正确,这正是WCF测试客户机在幕后所做的:获取WSDL,构建代理类,基于这些为用户生成UI。(WebServiceStudio也是如此)。我错了吗?可能吧。我的问题是我有一个服务,它有大量返回数据表或数据集的方法,WCF测试客户端不支持这些方法。我来晚了一点,但我通过将svcutil.exe生成的代码复制/粘贴到查询本身(使用C#程序类型)来减少这些步骤