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」);讓服務的實例能夠調用它的方法,但當然這是空的。
我錯過了什麼?任何想法不勝感激。讓我知道你是否需要更多細節。
沒錯。目前我無法創建它的一個實例,因爲我得到一個丟失的端點/配置類型錯誤,這是有道理的,但令人討厭。 謝謝 - 這給了我一些跟進。 – Donnelle 2009-07-02 09:52:27