如何同时使用 SOAP WCF 服务和 REST API
Posted
技术标签:
【中文标题】如何同时使用 SOAP WCF 服务和 REST API【英文标题】:How to Consume SOAP WCF Service and REST API Together 【发布时间】: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服务。
请在这方面提供帮助。谢谢
【问题讨论】:
问题解决了吗?如果我的回复对您有帮助,您可以将其标记为答案。如果问题没有解决,请告诉我。 【参考方案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());
如果问题仍然存在,请随时告诉我。
【讨论】:
以上是关于如何同时使用 SOAP WCF 服务和 REST API的主要内容,如果未能解决你的问题,请参考以下文章
将 WCF SOAP 和 WCF REST 服务托管为 Azure 应用服务