0


1

私はWsdlImporterとServiceContractGeneratorを使ってCodeDomProviderを設定し、(私は思ったように)HelloWorldServiceのインスタンスを作成できるようにするアセンブリを取得します。

MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress); mexClient.ResolveMetadataReferences = true; MetadataSet metaDocs = mexClient.GetMetadata();

WsdlImporter importer = new WsdlImporter(metaDocs); ServiceContractGeneratorジェネレータ= new ServiceContractGenerator();

System.Collections.ObjectModel.Collection contract = importer.ImportAllContracts(); importer.ImportAllEndpoints(); foreach(契約におけるContractDescription契約){generator.GenerateServiceContractType(contract); }

if(generator.Errors.Count!= 0){new Exception( "コードのコンパイル中にエラーが発生しました。"); }

CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider( "C#");

CompilerParameters parameters = new CompilerParameters(); parameters.CompilerOptions = string.Format(@ "/ lib:{0}"、 "\" C:\\ Program Files \\参照アセンブリ\\ 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 in results.Errors){新しい例外をスローします( "Compilation Error Creating Assembly:" oops.ErrorText);結果を返します。CompiledAssembly;

assembly.GetExportedTypes()およびassembly.GetTypes()は、IHelloWorldService、IHelloWorldServiceChannel、HelloWorldServiceClient、および2つのDataContract要求および応答タイプの5つのタイプを返します。

assembly.CreateInstance( "HelloWorldService")を使用できるようになることを期待していました。サービスのインスタンスがそのメソッドを呼び出すことができるようにするためですが、もちろんこれはnullです。

何が足りないの? 任意のアイデアは大歓迎です。 詳細が必要な場合はお知らせください。

1 Answer


1


これらの手法は、クライアントサイドクラスを作成するために使用されます。 HelloWorldServiceClientのインスタンスを作成すると、サービスとの通信に使用できるプロキシクラスのインスタンスが作成されます。