• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

动态创建服务参考和使用服务

c/c++ 来源:Muhammet Can TONBUL 3次浏览

我想要做的是;我使用配置文件中的“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


===========解决方案如下:

它可以更好地创建一个接口,并实现它的服务客户。通过这种方式,您应该指定配置文件中所需的方法,参数和其他内容,并且难以管理。另外,您不能将结果对象用作已知的类型类。

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

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 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)