【问题标题】:How to Consume SOAP WCF Service and REST API Together如何同时使用 SOAP WCF 服务和 REST API
【发布时间】:2020-12-06 14:23:50
【问题描述】:

我正在编写一个非常基本的应用程序,它将从数据库中获取一些数据,并将这些数据传递给全国各地的不同网络服务。 我的问题是,我必须向其传递数据的服务是 WCF 服务,其中一些是 WEB API。 我想在不添加服务引用的情况下使用 wcf 服务,所以我不会为所有服务创建单独的代理类,因为将来我们将添加更多的客户端,我也会使用他们的服务,所以手动添加服务暂时不给大家参考。

我将使用以下代码来使用不同的 wcf 服务:

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:4684/Service1.svc");
ChannelFactory factory = new ChannelFactory<ServiceContract>(binding, address);
ServiceContract channel = factory.CreateChannel();
string resturnmessage = channel.YourMethod("test");

但是我不能使用这种方法来消费REST API,所以我必须为此单独编写一个专用函数,并且需要标记客户端是否有REST API或WCF服务。

请在这方面提供帮助。谢谢

【问题讨论】:

  • 问题解决了吗?如果我的回复对您有帮助,您可以将其标记为答案。如果问题没有解决,请告诉我。

标签: rest wcf soap asp.net-web-api2 wcf-binding


【解决方案1】:

您可以将SOAP 代码放在SOAPDriver 类中,将REST 代码放在RESTDriver 类中。

然后创建一个使用 SOAPDriver 或 RESTDriver 的 WebService 类,具体取决于它被告知与之通信的服务。

伪代码:

// Get database data
String data = getDatabaseData();

WebService webService = new WebService();
webService.send(WebService.REST, data); // REST and SOAP are variables in the WebService class

class WebService {
  public static final int REST = 1;
  public static final int SOAP = 2;

  public void send(int serviceType, String data) {
    switch (serviceType) {
      case REST:
        restDriver.send(data);
        break;
        ...
    }
  }
}

【讨论】:

    【解决方案2】:

    这是我的演示:

    <endpoint address="REST"
        binding="webHttpBinding"
        contract="Demo_rest_ConsoleApp.IService1" behaviorConfiguration="ESEndPointBehavior"/>
    <endpoint address="SOAP" 
        binding="basicHttpBinding" 
        contract="Demo_rest_ConsoleApp.IService1"></endpoint>
    

    这是我的 WCF 服务。它发布了两个端点,一个是 SOAP 服务,另一个是 REST 服务。

     BasicHttpBinding binding = new BasicHttpBinding();
                EndpointAddress address = new EndpointAddress("http://localhost:8763/TEST/SOAP");
                ChannelFactory<IService1> factory = new ChannelFactory<IService1>(binding, address);
                IService1 channel = factory.CreateChannel();
                Console.WriteLine(channel.Test());
                Console.ReadLine();
    

    调用 SOAP 服务:

    WebHttpBinding binding = new WebHttpBinding();
                EndpointAddress address = new EndpointAddress("http://localhost:8763/TEST/REST");
                ChannelFactory<IService1> factory = new ChannelFactory<IService1>(binding, address);
                factory.Endpoint.EndpointBehaviors.Add(new WebHttpBehavior());
                IService1 channel = factory.CreateChannel();
                Console.WriteLine(channel.Test());
                Console.ReadLine();
    

    调用 REST 服务:

    调用 REST 服务时不要忘记添加 WebHttpBehavior:

    factory.Endpoint.EndpointBehaviors.Add(new WebHttpBehavior());
    

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

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 2013-01-24
      • 1970-01-01
      • 2020-12-15
      • 2019-08-15
      • 1970-01-01
      • 2010-09-16
      • 2012-03-29
      相关资源
      最近更新 更多