gpt4 book ai didi

c# - 动态创建服务引用和使用服务

转载 作者:行者123 更新时间:2023-11-30 16:41:52 25 4
gpt4 key购买 nike

我想做的是;我使用配置文件中的“WSDL”服务链接并以编程方式使用该服务,采用我将使用的方法的名称。

我静态使用并运行的代码片段如下,

ServiceName.serviceClientSoapClient= new ServiceName.serviceClientSoapClient();

string xmlStr = client.getValues();

终点是,

<endpoint address="http://someservice.com/Service.asmx"
binding="basicHttpBinding" bindingConfiguration="serviceClientSoap"
contract="ServiceName.serviceClientSoap" name="serviceClientSoap" />

但是,我希望所有这些都以编程方式创建,例如;我的配置文件,

 <add key="serviceLink" value="http://someservice.com/Service.asmx"/>
<add key="serviceClientClassName" value="serviceClientSoapClient"/>
<add key="serviceMethod" value="getValues"/>

然后我想使用这个配置文件,并使用服务,得到结果。

我查看了以下链接,但这里是通过单个服务结构完成的。我希望从配置文件安装它。

How to programmatically connect a client to a WCF service? , How to: Use the ChannelFactory

最佳答案

最好创建一个接口(interface)并将其实现为服务客户端。这样,您应该在配置文件中指定所需的方法、参数和其他内容,并且越来越难以管理。此外,您不能将结果对象用作已知类型类。

所以,你可以尝试这样的事情:

var url = ConfigurationManager.AppSettings["serviceLink"];
var serviceClientClassName = ConfigurationManager.AppSettings["serviceClientClassName"];
var serviceMethod = ConfigurationManager.AppSettings["serviceMethod"];
var endpoint = new EndpointAddress(new Uri(url));
//Specify the assembly of services library. I am assuming that the services are stored in the Executing Assembly
var serviceClient = Assembly.GetExecutingAssembly().GetTypes()
.FirstOrDefault(x => x.Name == serviceClientClassName);//Find the service client type
var instance = Activator.CreateInstance(serviceClient); //Create a new instance of type
var methodInfo = serviceClient.GetMethod(serviceMethod); //Get method info
var result = methodInfo.Invoke(instance, new object[] {}); // Invoke it

关于c# - 动态创建服务引用和使用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47864658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com