2009-07-02 6 views
0

J'utilise WsdlImporter et ServiceContractGenerator pour configurer CodeDomProvider pour obtenir un assembly qui (je pensais) devrait me permettre de créer une instance de mon HelloWorldService.assembly.GetExportedTypes() n'inclut pas le service WCF

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) et() retourne cinq types: IHelloWorldService, IHelloWorldServiceChannel, HelloWorldServiceClient, et les deux types et demande DataContract réponse.

Je m'attendais à pouvoir utiliser assembly.CreateInstance ("HelloWorldService"); pour obtenir une instance du service pour pouvoir invoquer des méthodes dessus, mais bien sûr c'est null.

Qu'est-ce qui me manque? Toutes les idées grandement appréciées. Faites-moi savoir si vous avez besoin de plus de détails.

Répondre

1

Ces techniques sont utilisées pour créer des classes côté client. Lorsque vous créez une instance de HelloWorldServiceClient, vous créez une instance de la classe proxy qui peut être utilisée pour communiquer avec le service.

+0

Droite. Actuellement, je ne peux pas en créer une instance car une erreur de type point de terminaison/config est manquante, ce qui est logique mais ennuyant. Merci, cela me donne quelque chose à suivre. – Donnelle