多くの場合、異なる状況下でWebサービスを呼び出す遭遇した仕事で、私はほとんどのも、このような状況が発生し、サイトは通常の使用を達成するために多くの情報を見つけ、コードは今あなたと共有します:
1、で上記の手順を使用して第1ヘッド。
1 使用System.CodeDom.Compilerと、 2 使用System.Web.Services.Descriptionと、 3 使用System.CodeDomと、 4 使用するSystem.Reflectionと、
2、WebサービスDLLをパッケージングする方法を作成します
1 プライベート BOOL CreateWebServicesDll() 2 { 3。 // 現在のディレクトリ内の実行可能ファイルを取得し 4 列パス= AppDomain.CurrentDomain.BaseDirectory + " MyWebServices.dll " ; 5 IF(File.Exists(パス)== falseに)// NOが存在する場合ファイルフォルダが作成されている 6。 { 7。 File.Delete(パス); 8 } 。9 試みる 10 { 11 // 1. WebクライアントダウンロードWSDL情報。 12は、 WebクライアントのWeb = 新新Webクライアント(); 13 ストリームストリーム= web.OpenRead(" http://192.168.100.101:8090/PrintService/MaterialService.asmx?wsdl " ); 14 // 2. WSDLドキュメントを作成し、フォーマットします。 15 ServiceDescription説明= ServiceDescription.Read(ストリーム); 16 // 3.クライアントプロキシプロキシクラスを作成します。 17 ServiceDescriptionImporter輸入= 新しい新しいServiceDescriptionImporter(); 18は = importer.ProtocolName " 石鹸" ; // 指定されたアクセスプロトコル。 19 = ServiceDescriptionImportStyle.Client importer.Style; // クライアントプロキシを生成します。 20 importer.CodeGenerationOptions =のCodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync; 21 22 importer.AddServiceDescription(説明、NULL、NULL); //は、WSDLドキュメントを追加します。 23 24 // 4.のCodeDOMは、クライアントプロキシクラスをコンパイルします。 25 CodeNamespaceのnmspace = 新新 CodeNamespace(); //は、名前空間のプロキシクラス、デフォルトのグローバル空間を追加します。 26は、 CodeCompileUnitユニット= 新新CodeCompileUnit(); 27 unit.Namespaces.Add(nmspace)。 28 29 ServiceDescriptionImportWarnings警告= importer.Import(nmspace、単位)。 30 CodeDomProviderプロバイダ= CodeDomProvider.CreateProvider(" CSHARP " )。 31 32 CompilerParametersパラメータ= 新しいCompilerParameters()。 33 parameter.GenerateExecutable = 偽; 34 parameter.OutputAssembly = " MyWebServices.dll "。// 指定你所需的任何文件名。 35 parameter.ReferencedAssemblies.Add(" System.dllの" )。 36 parameter.ReferencedAssemblies.Add(" System.XML.dll " )。 37 parameter.ReferencedAssemblies.Add(" System.Web.Services.dll " )。 38 parameter.ReferencedAssemblies.Add(" のSystem.Data.dll " )。 39 40 CompilerResultsは=結果provider.CompileAssemblyFromDom(パラメータ、ユニット)。 41 であれば(result.Errors.HasErrors) 42 { 43 // ディスプレイエラーメッセージコンパイラ 44は 戻り falseに; 45 } 46である 47 } 48 キャッチ(例外EX) 49 { 50 リターン falseに、 51である } 52が 53で 返す trueに、 54です }
コードはMyWebServices.dllこのファイルは、我々はdllファイルを生成したい名前があることに注意してください、あなたが会議をカスタマイズすることができ、そのURLアドレスは、Webサービスの終了時に必要とは?WSDLが続く先住所
3.反射コール
1 パブリック 文字列CallWebservices() 2 { 3 // 現在のファイルEXCのディレクトリ 。4 文字列のパス= AppDomain.CurrentDomain.BaseDirectory + " MyWebServices.dll " ; 5 IF(Directory.Exists(パス)== falseに)// 何が存在しない場合ファイルフォルダが作成されている 6。 { 7。 CreateWebServicesDll(); 8 } 。9 10 アセンブリASM = NULL ; 11 タイプTは、= NULL ; 12は、 13であります Assembly.LoadFrom = ASM(" MyWebServices.dll " ); 14 T = asm.GetType(" MaterialSupplierService " ); 15 16 オブジェクト O = Activator.CreateInstance(T); 17 METHODINFO方法t.GetMethod =(" GeSnIdListByBigBox ")。// メソッド名は、Webサービスを呼び出す必要がある 18である オブジェクト []引数= 新しい新しい オブジェクト [] { 「B1900420193 」 }; // Webサービスに必要な伝送パラメータを 19 文字列結果= method.Invoke(O、引数)として文字列。 20 21 リターン結果。 22 }