2009-07-02 75 views
0

我使用WsdlImporter和ServiceContractGenerator來設置CodeDomProvider來獲得一個組件(我認爲)應該允許我創建一個我的HelloWorldService實例。assembly.GetExportedTypes()不包括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()返回五種類型:IHelloWorldService,IHelloWorldServiceChannel,HelloWorldServiceClient,並且兩個DataContract請求和響應類型。

我期待能夠使用assembly.CreateInstance(「HelloWorldService」);讓服務的實例能夠調用它的方法,但當然這是空的。

我錯過了什麼?任何想法不勝感激。讓我知道你是否需要更多細節。

回答

1

這些技術用於創建客戶端類。當您創建HelloWorldServiceClient的實例時,您將創建可用於與服務進行通信的代理類的實例。

+0

沒錯。目前我無法創建它的一個實例,因爲我得到一個丟失的端點/配置類型錯誤,這是有道理的,但令人討厭。 謝謝 - 這給了我一些跟進。 – Donnelle 2009-07-02 09:52:27