Erro: Mensagem de erro "Não é possível importar a partir do espaço de nomes de ligação" ocorre quando tenta criar um ficheiro de proxy do XML Web Service utilizando a ferramenta de idioma do Web Services Descrição

Traduções de Artigos Traduções de Artigos
Artigo: 820122 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Pode tentar utilizar a ferramenta Web Services Description Language (Wsdl.exe) para criar um ficheiro de proxy do serviço Web XML para serviços para a Web documento WSDL (Description Language). No entanto, se o documento WSDL utiliza um esquema que está definido num esquema XML (ficheiro .xsd) externa que utiliza um elemento de inclusão (<include>) para obter informações sobre o tipo, poderá receber a seguinte mensagem de erro:

Erro: Não é possível importar o enlace 'Service1Soap' do espaço de nomes 'http://tempuri.org/'.
-Não é possível importar a operação 'HelloWorld'.
-O elemento 'http://tempuri.org/XMLSchema.xsd:element1' está em falta.

Causa

Poderá receber o erro mencionada na secção "Sintomas" quando Wsdl.exe não é possível obter informações completas sobre um elemento que está declarado num esquema XML externo. Wsdl.exe não consegue processar incluem elementos (<include><schema>) a menos que os elementos incluem estão contidos num elemento de esquema (<esquema>) contido na secção tipos (<types>) de um documento WSDL. Por conseguinte, quando o esquema XML que contém informações sobre um elemento que está definido no esquema XML externo utiliza um elemento de inclusão para obter informações adicionais do esquema XML externo, o problema ocorrer.

Como contornar

Para contornar este problema, tem de modificar o documento WSDL ou esquemas XML ou ambas, para que os esquemas XML não utilize incluir elementos. Para o fazer, siga estes passos:
  1. Abra Service1.wsdl. Cole o seguinte código depois do elemento de tipos (<types>):

    Nota Isto torna-se de que utiliza o elemento de inclusão na Service1.wsdl em vez de num esquema XML.
        <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified"
          xmlns="http://tempuri.org/XMLSchema.xsd"
          xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:include schemaLocation="XMLSchema2.xsd" />
          <xs:element name="element1" type="MyTyp1"></xs:element>
        </xs:schema>
    Service1.wsdl now contains the following code:
    <?xml version="1.0" encoding="utf-8"?>
    <definitions xmlns:s1="http://tempuri.org/XMLSchema.xsd"
       xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
       xmlns:s="http://www.w3.org/2001/XMLSchema"
       xmlns:s0="http://tempuri.org/"
       xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
       xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
       xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
       targetNamespace="http://tempuri.org/"
       xmlns="http://schemas.xmlsoap.org/wsdl/">
      <types>
        <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified"
          xmlns="http://tempuri.org/XMLSchema.xsd"
          xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:include schemaLocation="XMLSchema2.xsd" />
          <xs:element name="element1" type="MyTyp1"></xs:element>
        </xs:schema>
        <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
          <s:import namespace="http://tempuri.org/XMLSchema.xsd" />
          <s:element name="HelloWorld">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" ref="s1:element1" />
              </s:sequence>
            </s:complexType>
          </s:element>
          <s:element name="HelloWorldResponse">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
              </s:sequence>
            </s:complexType>
          </s:element>
        </s:schema>
      </types>
      <message name="HelloWorldSoapIn">
        <part name="parameters" element="s0:HelloWorld" />
      </message>
      <message name="HelloWorldSoapOut">
        <part name="parameters" element="s0:HelloWorldResponse" />
      </message>
      <portType name="Service1Soap">
        <operation name="HelloWorld">
          <input message="s0:HelloWorldSoapIn" />
          <output message="s0:HelloWorldSoapOut" />
        </operation>
      </portType>
      <portType name="Service1HttpGet" />
      <portType name="Service1HttpPost" />
      <binding name="Service1Soap" type="s0:Service1Soap">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
        <operation name="HelloWorld">
          <soap:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
          <input>
            <soap:body use="literal" />
          </input>
          <output>
            <soap:body use="literal" />
          </output>
        </operation>
      </binding>
      <binding name="Service1HttpGet" type="s0:Service1HttpGet">
        <http:binding verb="GET" />
      </binding>
      <binding name="Service1HttpPost" type="s0:Service1HttpPost">
        <http:binding verb="POST" />
      </binding>
      <service name="Service1">
        <port name="Service1Soap" binding="s0:Service1Soap">
          <soap:address location="http://localhost/820122/New3/WebService1/Service1.asmx" />
        </port>
        <port name="Service1HttpGet" binding="s0:Service1HttpGet">
          <http:address location="http://localhost/820122/New3/WebService1/Service1.asmx" />
        </port>
        <port name="Service1HttpPost" binding="s0:Service1HttpPost">
          <http:address location="http://localhost/820122/New3/WebService1/Service1.asmx" />
        </port>
      </service>
    </definitions>
  2. Mover para linha de comandos do Visual Studio. NET. Alterar o caminho de directório do Service1.wsdl.
  3. Execute o seguinte comando a partir da linha de comandos:

    WSDL Service1.wsdl

    Nota Neste caso, não é necessário fornecer Wsdl.exe com XMLSchema1.xsd como um parâmetro da linha de comandos. Já utiliza o elemento de inclusão Service1.wsdl.

    Poderá receber uma mensagem semelhante à seguinte:

    Escrever o ficheiro ' %File Path% '\Service1.cs.


    %File Path%é um marcador para a localização do Service1.wsdl.

    Além disso, um ficheiro de proxy de serviço Web XML denominado Service1.cs é criado.
Nota Estes passos baseiam-se o exemplo da secção "Mais informação" deste artigo. Por conseguinte, o código e nomes de ficheiro estes passos poderão diferir do código e os nomes de ficheiro.

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Passos para reproduzir o problema

  1. Start Notepad, and then paste the following WSDL code in Notepad:
    <?xml version="1.0" encoding="utf-8"?>
    <definitions xmlns:s1="http://tempuri.org/XMLSchema.xsd"
       xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
       xmlns:s="http://www.w3.org/2001/XMLSchema"
       xmlns:s0="http://tempuri.org/"
       xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
       xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
       xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
       targetNamespace="http://tempuri.org/"
       xmlns="http://schemas.xmlsoap.org/wsdl/">
      <types>
        <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
          <s:import namespace="http://tempuri.org/XMLSchema.xsd" />
          <s:element name="HelloWorld">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" ref="s1:element1" />
              </s:sequence>
            </s:complexType>
          </s:element>
          <s:element name="HelloWorldResponse">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
              </s:sequence>
            </s:complexType>
          </s:element>
        </s:schema>
      </types>
      <message name="HelloWorldSoapIn">
        <part name="parameters" element="s0:HelloWorld" />
      </message>
      <message name="HelloWorldSoapOut">
        <part name="parameters" element="s0:HelloWorldResponse" />
      </message>
      <portType name="Service1Soap">
        <operation name="HelloWorld">
          <input message="s0:HelloWorldSoapIn" />
          <output message="s0:HelloWorldSoapOut" />
        </operation>
      </portType>
      <portType name="Service1HttpGet" />
      <portType name="Service1HttpPost" />
      <binding name="Service1Soap" type="s0:Service1Soap">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
        <operation name="HelloWorld">
          <soap:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
          <input>
            <soap:body use="literal" />
          </input>
          <output>
            <soap:body use="literal" />
          </output>
        </operation>
      </binding>
      <binding name="Service1HttpGet" type="s0:Service1HttpGet">
        <http:binding verb="GET" />
      </binding>
      <binding name="Service1HttpPost" type="s0:Service1HttpPost">
        <http:binding verb="POST" />
      </binding>
      <service name="Service1">
        <port name="Service1Soap" binding="s0:Service1Soap">
          <soap:address location="http://localhost/820122/New3/WebService1/Service1.asmx" />
        </port>
        <port name="Service1HttpGet" binding="s0:Service1HttpGet">
          <http:address location="http://localhost/820122/New3/WebService1/Service1.asmx" />
        </port>
        <port name="Service1HttpPost" binding="s0:Service1HttpPost">
          <http:address location="http://localhost/820122/New3/WebService1/Service1.asmx" />
        </port>
      </service>
    </definitions>
  2. Guarde o documento como Service1.wsdl .
  3. Abrir o bloco de notas e, em seguida, cole o código seguinte no bloco de notas:
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified"
       xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
       <xs:include schemaLocation="XMLSchema2.xsd" />
       <xs:element name="element1" type="MyTyp1"></xs:element>
    </xs:schema>
  4. Guarde o documento como XMLSchema1.xsd na mesma pasta onde criou Service1.wsdl no passo 2.
  5. Cole o seguinte código no bloco de notas:
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified"
       xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
       <xs:complexType name="MyTyp1">
          <xs:sequence>
             <xs:element name="element1" type="xs:string" />
             <xs:element name="element2" type="xs:int" />
          </xs:sequence>
       </xs:complexType>
    </xs:schema>
  6. Guarde o documento como XMLSchema2.xsd na mesma pasta onde criou Service1.wsdl no passo 2.
  7. Mover para linha de comandos do Visual Studio. NET. Alterar o caminho de directório do Service1.wsdl.
  8. Execute o seguinte comando a partir da linha de comandos:

    wsdl Service1.wsdl XMLSchema1.xsd

    Recebe o erro em "Sintomas" secção deste artigo.

Referências

Para obter mais informações sobre como criar um proxy de serviço Web XML, a ferramenta Web Services Description Language (Wsdl.exe) e esquemas XML, visite os seguintes Web sites da Microsoft:

http://msdn2.microsoft.com/en-us/library/d2s8y7bs(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/7h3ystb6(vs.71).aspx



Para obter mais informações sobre WSDL Web Services Description Language () 1.1, visite o seguinte site de W3C Web:

http://www.w3.org/TR/wsdl

Propriedades

Artigo: 820122 - Última revisão: 24 de maio de 2007 - Revisão: 3.4
A informação contida neste artigo aplica-se a:
  • Microsoft Web Services Enhancements for Microsoft .NET 1.1
  • Microsoft Web Services (included with the .NET Framework) 1.0
Palavras-chave: 
kbmt kbclient kbproxydev kbmisctools kbcodegen kbxml kbschema kbcommandline kbwebservices kbcompiler kberrmsg kbbug KB820122 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 820122
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

Kontaktieren Sie uns, um weitere Hilfe zu erhalten

Kontaktieren Sie uns, um weitere Hilfe zu erhalten
Wenden Sie sich an den Answer Desk, um professionelle Hilfe zu erhalten.