如何同时使用 SOAP WCF 服务和 REST API

How to Consume SOAP WCF Service and REST API Together

我正在编写一个非常基本的应用程序,它将从数据库中获取一些数据,并将这些数据传递给全国各地的不同网络服务。 我的问题是,我必须向其传递数据的服务是 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");

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

这方面请帮忙。谢谢

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

然后创建一个 WebService class,它根据被告知要与之通信的服务使用 SOAPDriver 或 RESTDriver。

伪代码:

// 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;
        ...
    }
  }
}

这是我的演示:

<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());

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