gpt4 book ai didi

wcf - 给定 wsdl,快速轻松地实现 WCF Web 服务?

转载 作者:行者123 更新时间:2023-12-03 14:19:49 26 4
gpt4 key购买 nike

我正在编写一个客户端来访问将由第三方托管的 SOAP Web 服务。我有定义接口(interface)和数据的 WSDL 和 XSD。

我从 WSDL 创建服务引用没有问题,但是在构建一个实现它的简单 Web 服务时遇到了问题,我可以用它来测试。 (第三方的服务还没有准备好,但即使它正在运行,我仍然想对我自己的测试服务器进行初始测试,而不是针对他们的。)

我四处浏览,显然我可以使用 svcutil 为服务生成一个接口(interface):

svcutil.exe thewsdl.wsdl thexsd.xsd /language:c# /out:ITestService.cs

这会生成一个包含服务接口(interface)定义的文件。但现在呢?

我认为最简单的方法是构建一个自托管服务,因此我创建了一个新的控制台应用程序,并在其中实现了一个从服务接口(interface)定义派生的类,并使用 ServiceHost 启动它。

它运行,当它运行时,我能够在我的客户端应用程序中创建一个服务引用。但是当我尝试从客户端应用程序调用它时,我收到一个错误:
The provided URI scheme 'http' is invalid; expected 'https'.

解决这个问题的最简单方法是什么?有没有一种简单的方法可以简单地关闭身份验证和授权,并简单地允许不受限制的访问?

编辑:

我正在为此增加赏金,因为最初的问题似乎没有引起注意。

但是,让我们进入症结所在。我正在尝试针对客户的 SOAP 服务编写客户端。作为开发的一部分,我想创建自己的测试 WCF 服务,它实现了相同的 WSDL。

所以我有一个下载的 .wsdl 文件和一个关联的 .xsd 文件,我想用它们创建一个可以使用 VS2010 的调试器进行测试的服务。

这个服务是独立运行,还是在 IIS 中运行,或者它是生产稳定的,对我来说并不重要。我想要的只是一种服务,它接受客户站点将接受的请求,并将响应返回给我需要它返回的客户,以测试我对它们的处理。

我如何到达那里?我尝试添加一个 WCF 服务库,然后在其中使用 svcutil.exe 添加我的新服务,但它似乎没有使用服务器端样板填充 app.config,并且我尝试重建它没有没用。

最佳答案

因为您想要一个完整的服务来调用而不是模拟它。

跟着这些步骤:

  • 创建新的“WCF 服务应用程序”项目
  • 将 wsdl 和 xsd 复制到项目
  • 选择您的 wsdl 文件并查看属性部分并从完整路径复制位置
  • 在解决方案资源管理器中右键单击项目并选择“添加服务引用...”
  • 对于服务地址,粘贴在上一步中复制的 wsdl 的位置,然后点击 go。它应该显示您期望的服务操作。
  • 点击确定
  • 它应该为您生成所有对象,包括接口(interface)和配置文件(尽管此时是配置中的客户端-我们必须将其切换为服务)
  • 现在您应该在 system.serviceModel 部分中添加服务配置部分。由于我不知道您的 wsdl 的细节,您应该做的是在 system.serviceModel 部分中创建服务节点并从生成的客户端节点复制端点节点。例如下面的服务节点,您可以暂时将地址空白:

  •  <system.serviceModel>
    <services>
    <service name="YourService">
    <endpoint address=""
    binding="basicHttpBinding" bindingConfiguration="WeatherSoap"
    contract="ServiceReference1.WeatherSoap" name="WeatherSoap" />
    </service>

  • 删除配置中的客户端节点
  • 在服务中,它在生成项目时实现了一个不同的接口(interface),因此您需要将实现的接口(interface)替换为上面端点的契约(Contract)属性中列出的接口(interface)。然后实现它的成员,它应该爆炸可用的操作。您可以填写您希望服务操作返回的任何内容。
  • 根据 wsdl 中的内容,我们可能需要做更多的事情来运行必要的绑定(bind)——比如设置 wsHttpbinding、netTCPbinding 等。
  • 关于wcf - 给定 wsdl,快速轻松地实现 WCF Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11235638/

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