ServiceDescriptionImporter Classe

Definição

Expõe um meio de gerar classes proxy de cliente para serviços Web XML.

public ref class ServiceDescriptionImporter
public class ServiceDescriptionImporter
type ServiceDescriptionImporter = class
Public Class ServiceDescriptionImporter
Herança
ServiceDescriptionImporter

Exemplos

O exemplo seguinte ilustra a utilização da ServiceDescriptionImporter classe para gerar código proxy cliente que chama um serviço Web XML descrito por um ficheiro WSDL.

#using <System.Xml.dll>
#using <System.Web.Services.dll>
#using <System.dll>

using namespace System;
using namespace System::Web::Services::Description;
using namespace System::CodeDom;
using namespace System::CodeDom::Compiler;

int main()
{
   // Get a WSDL file describing a service.
   ServiceDescription^ description = ServiceDescription::Read( "service.wsdl" );

   // Initialize a service description importer.
   ServiceDescriptionImporter^ importer = gcnew ServiceDescriptionImporter;
   importer->ProtocolName = "Soap12"; // Use SOAP 1.2.
   importer->AddServiceDescription( description, nullptr, nullptr );

   // Report on the service descriptions.
   Console::WriteLine( "Importing {0} service descriptions with {1} associated schemas.", importer->ServiceDescriptions->Count, importer->Schemas->Count );

   // 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 = gcnew CodeNamespace;
   CodeCompileUnit^ unit = gcnew CodeCompileUnit;
   unit->Namespaces->Add( nmspace );
   
   // Import the service into the Code-DOM tree. This creates proxy code
   // that uses the service.
   ServiceDescriptionImportWarnings warning = importer->Import(nmspace,unit);
   if ( warning == (ServiceDescriptionImportWarnings)0 )
   {
      // Generate and print the proxy code in C#.
      CodeDomProvider^ provider = CodeDomProvider::CreateProvider( "CSharp" );
      ICodeGenerator^ generator = provider->CreateGenerator();
      generator->GenerateCodeFromCompileUnit( unit, Console::Out, gcnew CodeGeneratorOptions );
   }
   else
   {
      // Print an error message.
      Console::WriteLine( warning );
   }
}
using System;
using System.Web.Services.Description;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Security.Permissions;

public class Import {

    public static void Main() 
    {
        Run();
    }

    [PermissionSetAttribute(SecurityAction.Demand, Name = "Full Trust")]
    public static void Run()
    {
    // Get a WSDL file describing a service.
    ServiceDescription description = ServiceDescription.Read("service.wsdl");

    // Initialize a service description importer.
    ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
    importer.ProtocolName = "Soap12";  // Use SOAP 1.2.
    importer.AddServiceDescription(description,null,null);

    // Report on the service descriptions.
    Console.WriteLine("Importing {0} service descriptions with {1} associated schemas.",
                      importer.ServiceDescriptions.Count, importer.Schemas.Count);

    // 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 unit = new CodeCompileUnit();
    unit.Namespaces.Add(nmspace);

    // Import the service into the Code-DOM tree. This creates proxy code
    // that uses the service.
    ServiceDescriptionImportWarnings warning = importer.Import(nmspace,unit);

    if (warning == 0)
    {
        // Generate and print the proxy code in C#.
        CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
        provider.GenerateCodeFromCompileUnit(unit, Console.Out, new CodeGeneratorOptions() );
    }
    else
    {
        // Print an error message.
        Console.WriteLine(warning); 
    }
}
}

Observações

A interface para um serviço Web XML é tipicamente descrita por um ficheiro Web Services Description Language (WSDL). Por exemplo, para obter uma descrição WSDL de um serviço Web usando ASP.NET exposto em http://localhost/service.asmx, basta navegar até http://localhost/service.asmx?WSDL.

A ServiceDescriptionImporter classe permite-lhe importar facilmente a informação contida numa descrição WSDL para um System.CodeDom.CodeCompileUnit objeto. Ao ajustar o valor do Style parâmetro, pode instruir uma ServiceDescriptionImporter instância a gerar uma classe proxy cliente que forneça a funcionalidade do serviço Web ao chamá-lo de forma transparente ou a gerar uma classe abstrata que encapsule a funcionalidade do serviço Web sem a implementar.

O código no objeto resultante CodeCompileUnit pode então ser chamado diretamente ou exportado na linguagem que preferir.

Importante

Não uses ServiceDescriptionImporter com input não confiável. Importar um ServiceDescription de fontes não confiáveis pode resultar na geração de código que acede a URLs arbitrárias ou instancia tipos de .NET arbitrários, potencialmente levando a vulnerabilidades de segurança.

Construtores

Name Description
ServiceDescriptionImporter()

Inicializa uma nova instância da ServiceDescriptionImporter classe.

Propriedades

Name Description
CodeGenerationOptions

Obtém ou definem várias opções para geração de código.

CodeGenerator

Obtém ou define o gerador de código usado pelo importador de descrição de serviço.

ProtocolName

Obtém ou define o protocolo utilizado para aceder aos serviços Web XML descritos.

Schemas

Fica usado XmlSchemas pela ServiceDescriptions propriedade.

ServiceDescriptions

Obtém a coleção de ServiceDescription instâncias a importar.

Style

Recebe ou define um valor que determina o estilo do código (cliente ou servidor) gerado quando os ServiceDescriptions valores são importados.

Métodos

Name Description
AddServiceDescription(ServiceDescription, String, String)

Adiciona o especificado ServiceDescription à coleção de ServiceDescriptions valores a importar.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GenerateWebReferences(WebReferenceCollection, CodeDomProvider, CodeCompileUnit, WebReferenceOptions)

Compila uma coleção de referências Web para produzir um proxy de cliente ou um stub de servidor.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
Import(CodeNamespace, CodeCompileUnit)

Importa os valores especificados ServiceDescriptions , o que gera código conforme especificado pela Style propriedade.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a