【问题标题】:How to make a new WCF service when I only have a WCF client当我只有 WCF 客户端时如何创建新的 WCF 服务
【发布时间】:2020-09-15 18:12:27
【问题描述】:

我有一个调用 asmx Web 服务的应用程序,但该服务不再存在。没有代码,没有 wsdl,什么都没有。

客户端是一个简单的控制台应用程序,它具有对不再存在的服务的服务引用。除了更改其 app.confing 中的 URL 和绑定数据外,不得以任何方式修改客户端。不允许重新编译。

如果我可以创建新服务,我就可以实现所需的调用。我怎样才能使服务适用于旧客户端?

【问题讨论】:

  • @RyanWilson 问题是如何创建服务以使其与客户端兼容。不仅仅是如何创建任何服务。
  • 看看客户端在做什么,看看它创建了什么样的请求(如果需要可以使用工具检查请求的原始内容),然后会更容易编写一个可以接收该格式请求的服务器。如果您在那之后仍然在苦苦挣扎,请向我们展示您客户的相关代码,以及您收集的有关请求内容的任何信息,也许我们可以帮助您。现在我们不能给你一个明确的答案,我们所能做的就是告诉你,就像我所做的那样,去获取更多的信息。
  • WCF 客户端将调用服务器的方法。客户端只知道服务接口,接口的实现在WCF服务器上。如果没有服务器端代码,你将不知道接口是如何实现的。我认为您的需求无法实现。
  • 这是一个很好的观点。除非您已经非常熟悉该服务在幕后所做的事情,否则除了表面上的替换之外,可能很难重新创建任何东西。您也许可以让它接受您的应用程序发送的请求,但您是否确切知道它对之后的数据做了什么?
  • @DingPeng 所以,我对服务方法的实现不感兴趣,我知道如何实现这些方法。我有兴趣制作具有相同服务合同的服务,因为无法重新编译和重新分发客户端。

标签: c# visual-studio web-services wcf


【解决方案1】:

新服务器只需要与旧服务器具有相同的端点、绑定和契约,因此客户端可以在不更新服务引用的情况下运行。

如果客户端的端点信息如下所示:

    <client>
        <endpoint address="http://localhost:8000/GettingStarted/CalculatorService"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ICalculator"
            contract="ServiceReference1.ICalculator" name="WSHttpBinding_ICalculator">
        </endpoint>
    </client>

新服务器应如下所示:

Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/");
selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");

如果问题仍然存在,请随时告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多