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