从原始类型创建服务引用代理类型的实例?

时间:2011-06-22 16:53:25

标签: c# web-services reflection

给定一个类型,比如说Apple,我想创建一个等效的类型,如果Apple作为服务引用代理类型自动生成,将会创建。

因此,Apple的类型为AwesomeWebService.Apple,但是当Studio为AwesomeWebService服务生成代理类时,它创建的类型是包含代理的程序集的本地内容。

它变成OtherAssembly.AwesomeWebServiceProxyReference.Apple

诀窍是我直到运行时才知道我要创建的代理类型(Apple或其他)。这太容易了。

我确实有一个服务引用客户端的实例,比如OtherAssembly.AwesomeWebServiceProxyReference.AwesomeWebServiceSoapClient,但到目前为止我还没有将这些信息与原始类型一起使用来获取我所追求的代理类型。当我尝试时,我得到一个错误,即在程序集中找不到Type。

Activator.CreateInstance("OtherAssemblyName", "TypeNameOfOriginalType");

其中“OtherAssemblyName”是从proxyClientType.GetType().Assembly.FullName收集而“TypeNameOfOriginal”是originalType.GetType().Name

Activator.CreateInstance("OtherAssembly", "Apple");

1 个答案:

答案 0 :(得分:0)

想出来。

最简单的方法就是获取我尝试为(参数)创建对象的方法,获取ParameterInfo对象,并从中获取确切的类型。

Type t = proxy.GetType();
MethodInfo m = t.GetMethodInfo("methodName");
ParameterInfo[] mParams = m.GetParameters();
string typeName = mParam.ParameterType.AssemblyQualifiedName;