【问题标题】:assembly.GetExportedTypes() doesn't include WCF serviceassembly.GetExportedTypes() 不包括 WCF 服务
【发布时间】:2009-07-02 09:33:06
【问题描述】:

我使用 WsdlImporter 和 ServiceContractGenerator 来设置 CodeDomProvider 以获得一个程序集(我认为)应该允许我创建我的 HelloWorldService 的实例。

MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);
mexClient.ResolveMetadataReferences = true;
MetadataSet metaDocs = mexClient.GetMetadata();

WsdlImporter importer = new WsdlImporter(metaDocs);
ServiceContractGenerator generator = new ServiceContractGenerator();

System.Collections.ObjectModel.Collection<ContractDescription> contracts
            = importer.ImportAllContracts();
importer.ImportAllEndpoints();
foreach (ContractDescription contract in contracts)
{
    generator.GenerateServiceContractType(contract);
}

if (generator.Errors.Count != 0)
{
    throw new Exception("There were errors during code compilation.");
}

CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("C#");

CompilerParameters parameters = new CompilerParameters();
parameters.CompilerOptions = string.Format(@" /lib:{0}", "\"C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.0\"");
parameters.ReferencedAssemblies.Add("System.ServiceModel.dll");
parameters.ReferencedAssemblies.Add("System.Runtime.Serialization.dll");

CodeCompileUnit codeUnit = generator.TargetCompileUnit;

CompilerResults results = codeDomProvider.CompileAssemblyFromDom(parameters, codeUnit);

foreach (CompilerError oops in results.Errors)
{
    throw new Exception("Compilation Error Creating Assembly: " + oops.ErrorText);
}
return results.CompiledAssembly;

assembly.GetExportedTypes() 和 assembly.GetTypes() 返回五种类型:IHelloWorldService、IHelloWorldServiceChannel、HelloWorldServiceClient,以及两种 DataContract 请求和响应类型。

我希望能够使用 assembly.CreateInstance("HelloWorldService");获取服务的实例以便能够对其调用方法,但这当然是 null。

我错过了什么?任何想法都非常感谢。如果您需要更多详细信息,请告诉我。

【问题讨论】:

    标签: c# wcf reflection


    【解决方案1】:

    这些技术用于创建客户端类。当您创建 HelloWorldServiceClient 的实例时,您将创建可用于与服务通信的代理类的实例。

    【讨论】:

    • 对。目前我无法创建它的实例,因为我得到一个缺少端点/配置类型的错误,这很有意义但很烦人。谢谢——这给了我一些跟进的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多