WsdlImporterとServiceContractGeneratorを使用してCodeDomProviderを設定して、HelloWorldServiceのインスタンスを作成できるようにするアセンブリを取得します。 IHelloWorldService、IHelloWorldServiceChannel、HelloWorldServiceClient、二つのDataContract要求及び応答タイプ: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()の5種類を返します。
assembly.CreateInstance( "HelloWorldService");を使用できることが予想されていました。サービスのインスタンスを取得してメソッドを呼び出すことができますが、もちろんこれはnullです。
私には何が欠けていますか?任意のアイデアを大いに感謝します詳細が必要な場合はお知らせください。
右。現在のところ、エンドポイント/設定タイプの欠落したエラーが発生するため、インスタンスを作成できません。これは意味がありますが迷惑です。 ありがとうございます - それは私にフォローアップするものを与えます。 – Donnelle