代码之家  ›  专栏  ›  技术社区  ›  Donnelle

组装。GetExportedTypes()不包括WCF服务

  •  0
  • Donnelle  · 技术社区  · 17 年前

    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;
    

    我原本期望能够使用汇编。CreateInstance(“HelloWorldService”);获取服务的实例,以便能够调用其上的方法,但当然这是null。

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

    1 回复  |  直到 17 年前
        1
  •  1
  •   John Saunders    17 年前

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

    推荐文章