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