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

问题描述

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

请对此提供帮助。谢谢

解决方法

您可以将<Stack.Screen name="Mediclic" component={AppDraw} 代码放在 import { NavigationContainer,useNavigation,DrawerActions } from '@react-navigation/native'; . . . render({ return ( <Root> <NavigationContainer ref={navigationRef}> <Stack.Navigator > <Stack.Screen name="Accueil" children={this.AppDraw} options={ headerLeft: () => <TouchableOpacity style={{ marginLeft: 5 }} onPress={() => navigation.openDrawer() }> <MaterialIcons name='menu' size={28} color={'white'} /> </TouchableOpacity>,} } /> </Stack.Navigator> </NavigationContainer> ); } } AppDraw = () => <Drawer.Navigator> <Drawer.Screen name="Accueil" component={AccueilScreen} /> <Drawer.Screen name="A propos" component={AboutScreen} /> </Drawer.Navigator> 类中,并将SOAP代码放在SOAPDriver类中。

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

伪代码:

RESTDriver
,

这是我的演示:

<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服务:

enter image description here

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服务:

enter image description here

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

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

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