Ir para o conteúdo
lizie

adiconar web references dinamicamente

Mensagens Recomendadas

lizie    0
lizie

olá,

Meu problema é o seguinte:

Eu preciso de inserir uma web references dinamicamente em runtime. Encontrei um código que me permite efetuar isso, o problema é que este código só aceita url .asmx e a minha acaba em .wsdl.

Alguém pode me ajudar.o erro dá na variável warning antes de me retornar 0 esta a retornar OptionalExtensionsIgnored.

Obrigada :)

[securityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
public static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
{
System.Net.WebClient client = new System.Net.WebClient();
// Connect To the web service
	if (!webServiceAsmxUrl.Contains("?wsdl"))
		webServiceAsmxUrl += "?wsdl";
		System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl);
// Now read the WSDL file describing a service.
ServiceDescription description = ServiceDescription.Read(stream);
///// LOAD THE DOM /////////
	// Initialize a service description importer.
	ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
	importer.ProtocolName = "Soap"; // Use SOAP 1.2.
	importer.AddServiceDescription(description, null, null);
// Generate a proxy client.
	importer.Style = ServiceDescriptionImportStyle.Client;
// Generate properties to represent primitive values.
	importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
// Initialize a Code-DOM tree into which we will import the service.
	CodeNamespace nmspace = new CodeNamespace();
	CodeCompileUnit unit1 = new CodeCompileUnit();
	unit1.Namespaces.Add(nmspace);
// Import the service into the Code-DOM tree. This creates proxy code that uses the service.
	ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);
if (warning == 0) // If zero then we are good to go
{
	// Generate the proxy code
	CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");
	// Compile the assembly proxy with the appropriate references
	string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };
	CompilerParameters parms = new CompilerParameters(assemblyReferences);
	CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);
	// Check For Errors
	if (results.Errors.Count > 0)
		{
			foreach (CompilerError oops in results.Errors)
			{
				System.Diagnostics.Debug.WriteLine("========Compiler error============");
				System.Diagnostics.Debug.WriteLine(oops.ErrorText);
			}
			throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
		}
	// Finally, Invoke the web service method
	object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
	MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
	return mi.Invoke(wsvcClass, args);
}
else
{
	return null;
}
}

Editado por apocsantos
Geshi + Identação

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
apocsantos    211
apocsantos

Boa noite,

Depois de ver o código a unica coisa que me saltou à vista foi uma falta de chavetas.

[securityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
public static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
{
	System.Net.WebClient client = new System.Net.WebClient();
	// Connect To the web service
			if (!webServiceAsmxUrl.Contains("?wsdl"))
			{
					webServiceAsmxUrl += "?wsdl";
					System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl);
				// Now read the WSDL file describing a service.
				ServiceDescription description = ServiceDescription.Read(stream);
				///// LOAD THE DOM /////////
						// Initialize a service description importer.
						ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
						importer.ProtocolName = "Soap"; // Use SOAP 1.2.
						importer.AddServiceDescription(description, null, null);
				// Generate a proxy client.
						importer.Style = ServiceDescriptionImportStyle.Client;
				// Generate properties to represent primitive values.
						importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
				// Initialize a Code-DOM tree into which we will import the service.
						CodeNamespace nmspace = new CodeNamespace();
						CodeCompileUnit unit1 = new CodeCompileUnit();
						unit1.Namespaces.Add(nmspace);
				// Import the service into the Code-DOM tree. This creates proxy code that uses the service.
						ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);
				if (warning == 0) // If zero then we are good to go
				{
						// Generate the proxy code
						CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");
						// Compile the assembly proxy with the appropriate references
						string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };
						CompilerParameters parms = new CompilerParameters(assemblyReferences);
						CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);
						// Check For Errors
						if (results.Errors.Count > 0)
								{
										foreach (CompilerError oops in results.Errors)
										{
												System.Diagnostics.Debug.WriteLine("========Compiler error============");
												System.Diagnostics.Debug.WriteLine(oops.ErrorText);
										}
										throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
								}
						// Finally, Invoke the web service method
						object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
						MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
						return mi.Invoke(wsvcClass, args);
				}
				else
				{
						return null;
				}
			}
}

Cordiais cumprimentos,

Apocsnatos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.