Erro: Erro "Não é possível converter implicitamente o tipo 'System.Data.DataSet'" ao aplicativo é criado

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 815131
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Informações de versão beta
Este artigo aborda uma versão beta de um Microsoft produto. As informações neste artigo são fornecidas como - é e estão sujeitas a alterações sem aviso prévio.

Nenhum suporte formal está disponível da Microsoft para este produto beta. Para obter informações sobre como obter suporte para uma versão beta, consulte a documentação que acompanha o Beta arquivos do produto, ou verifique o local da Web da qual você a versão foi baixada.
Sintomas
Você tem um serviço da Web que tem um método de Serviço da Web que retorna uma instância de uma classe personalizada. A classe que é retornada pelo método Serviço da Web implementa a interface IXmlSerializable . Se você usar este serviço da Web em um aplicativo, você receberá a seguinte mensagem de erro ao criar o aplicativo:
Não é possível converter implicitamente o tipo 'System.Data.DataSet' para 'ClassLibrary.ClassName'
Causa
Quando você adiciona uma referência da Web para um serviço da Web, o Microsoft Visual Studio .NET usa incorretamente System.Data.DataSet em vez da classe que implementa a interface IXmlSerializable . Portanto, o método de Serviço da Web na classe proxy retorna System.Data.DataSet em vez da classe personalizada que implementa a interface IXmlSerializable . Portanto, você recebe a mensagem de erro quando você consumir o método de Serviço da Web no aplicativo da Web.
Resolução
Para resolver esse problema, substitua manualmente System.Data.DataSet na classe proxy com a classe personalizada que implementa a interface IXmlSerializable . Para fazer isso, execute as seguintes etapas:
  1. No Solution Explorer, clique em aplicativo da Web do projeto.
  2. No menu Project , clique em Mostrar todos os arquivos .
  3. No Solution Explorer, expanda Web referências e em seguida, expanda localhost .
  4. Expanda o nó Reference.map e, em seguida, clique duas vezes o arquivo de proxy Reference.cs ou Reference.vb .
  5. Localize o método que retorna System.Data.DataSet incorretamente. Por exemplo, localize o código a seguir para o arquivo proxy do serviço na Web é usado na seção "Mais informações" deste artigo:

    Código do Visual .NET translation from VPE for Csharp

            [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetMyObject", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]        public System.Data.DataSet GetMyObject() {            object[] results = this.Invoke("GetMyObject", new object[0]);            return ((System.Data.DataSet)(results[0]));        }

    Código do Visual Basic .NET

          <System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetMyObject", RequestNamespace:="http://tempuri.org/", ResponseNamespace:="http://tempuri.org/", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _      Public Function GetMyObject() As System.Data.DataSet         Dim results() As Object = Me.Invoke("GetMyObject", New Object(-1) {})         Return CType(results(0), System.Data.DataSet)      End Function
  6. Substitua manualmente System.Data.DataSet pelo nome da sua classe personalizada que implementa a interface IXmlSerializable . Por exemplo, modificar o método localizado na etapa 5 da seguinte maneira:

    Código do Visual .NET translation from VPE for Csharp

            [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetMyObject", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]        public MyTestClass GetMyObject() {            object[] results = this.Invoke("GetMyObject", new object[0]);            return ((MyTestClass)(results[0]));        }

    Código do Visual Basic .NET

          <System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetMyObject", RequestNamespace:="http://tempuri.org/", ResponseNamespace:="http://tempuri.org/", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _      Public Function GetMyObject() As MyTestClass         Dim results() As Object = Me.Invoke("GetMyObject", New Object(-1) {})         Return CType(results(0), MyTestClass)      End Function
Situação
A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.
Mais Informações

Passos para reproduzir o problema

  1. Criar um novo projeto Visual Basic ou ASP.NET Web Service translation from VPE for Csharp Visual e denomine MyTestWebService .
  2. No Solution Explorer, clique com o botão direito do mouse em Service1.asmx e, em seguida, clique em View Code .
  3. Substitua o código existente com o código a seguir:

    Código do Visual .NET translation from VPE for Csharp

    using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Web;using System.Web.Services;using System.Xml;using System.Xml.Schema;using System.Xml.Serialization;namespace MyTestWebService{   public class MyTestWebService : WebService   {      public MyTestWebService()      {      }            // Web Service method that Returns Custom Class      [WebMethod]      public MyTestClass GetMyObject()      {         MyTestClass myObj = new MyTestClass();         return myObj;      }   }   // Class that implements IXmlSerializable   public class MyTestClass : IXmlSerializable   {      // Constructor      public MyTestClass()      {      }            // Implementing IXmlSerializable method GetSchema       XmlSchema IXmlSerializable.GetSchema()      {         return null;      }            // Implementing IXmlSerializable method ReadXml      void IXmlSerializable.ReadXml(XmlReader reader)      {      }      // Implementing IXmlSerializable method WriteXml      void IXmlSerializable.WriteXml(XmlWriter writer)      {      }   }}

    Código do Visual Basic .NET

    Imports SystemImports System.CollectionsImports System.ComponentModelImports System.DataImports System.DiagnosticsImports System.WebImports System.Web.ServicesImports System.XmlImports System.Xml.SchemaImports System.Xml.Serialization<WebService(Namespace:="http://tempuri.org/")> _Public Class MyWebServiceClass   Inherits System.Web.Services.WebService   Public Sub New()   End Sub   <WebMethod()> _   Public Function GetMyObject() As MyTestClass      Dim myObj As New MyTestClass()      Return myObj   End FunctionEnd Class' Class that implements IXmlSerializablePublic Class MyTestClass   Implements IXmlSerializable   ' Default Constructor   Public Sub New()   End Sub   ' Implementing IXmlSerializable method GetSchema    Public Function GetSchema() As XmlSchema Implements IXmlSerializable.GetSchema   End Function   ' Implementing IXmlSerializable method ReadXml   Public Sub ReadXml(ByVal reader As XmlReader) Implements IXmlSerializable.ReadXml   End Sub   ' Implementing IXmlSerializable method WriteXml   Public Sub WriteXml(ByVal writer As XmlWriter) Implements IXmlSerializable.WriteXml   End SubEnd Class
  4. No menu Build , clique em Build Solution .
  5. No menu arquivo , aponte para Adicionar projeto e em seguida, clique New Project .
  6. Em Project Types , clique em Projetos do Visual Basic ou Visual translation from VPE for Csharp projetos e em modelos , clique em ASP.NET Web Application .
  7. Nome do projeto MyTestApplication e, em seguida, clique em OK .
  8. No Solution Explorer, clique com o botão direito do mouse em WebForm1.aspx e, em seguida, clique em View Code .
  9. Substitua o código existente com o código a seguir:

    Código do Visual .NET translation from VPE for Csharp

    using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using System.Xml;using System.Xml.Schema;using System.Xml.Serialization;namespace WebApplication47{	public class WebForm1 : System.Web.UI.Page	{		private void Page_Load(object sender, System.EventArgs e)		{			localhost.MyObjectService obj = new localhost.MyObjectService();         MyTestClass objTest;         objTest = obj.GetMyObject();		}		#region Web Form Designer generated code		override protected void OnInit(EventArgs e)		{			InitializeComponent();			base.OnInit(e);		}				private void InitializeComponent()		{    			this.Load += new System.EventHandler(this.Page_Load);		}		#endregion	}   // Class that implements IXmlSerializable   public class MyTestClass : IXmlSerializable   {      // Constructor      public MyTestClass()      {      }            // Implementing IXmlSerializable method GetSchema       XmlSchema IXmlSerializable.GetSchema()      {         return null;      }            // Implementing IXmlSerializable method ReadXml      void IXmlSerializable.ReadXml(XmlReader reader)      {      }      // Implementing IXmlSerializable method WriteXml      void IXmlSerializable.WriteXml(XmlWriter writer)      {      }   }}

    Código do Visual Basic .NET

    Imports SystemImports System.XmlImports System.Xml.SchemaImports System.Xml.SerializationPublic Class WebForm1   Inherits System.Web.UI.Page#Region " Web Form Designer Generated Code "   'This call is required by the Web Form Designer.   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()   End Sub   Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init       InitializeComponent()   End Sub#End Region   Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load      Dim obj As New localhost.MyWebServiceClass()      Dim objTest As MyTestClass      objTest = obj.GetMyObject()   End SubEnd Class' Class that implements IXmlSerializablePublic Class MyTestClass   Implements IXmlSerializable   ' Default Constructor   Public Sub New()   End Sub   ' Implementing IXmlSerializable method GetSchema    Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements IXmlSerializable.GetSchema   End Function   ' Implementing IXmlSerializable method ReadXml   Public Sub ReadXml(ByVal reader As System.Xml.XmlReader) Implements IXmlSerializable.ReadXml   End Sub   ' Implementing IXmlSerializable method WriteXml   Public Sub WriteXml(ByVal writer As System.Xml.XmlWriter) Implements IXmlSerializable.WriteXml   End SubEnd Class
  10. No Solution Explorer, clique com o botão direito do mouse MyTestApplication e, em seguida, clique em Add Web Reference .
  11. Na caixa de texto endereço , digite http://localhost/MyTestWebService/Service1.asmx e, em seguida, pressione ENTER.
  12. Clique em Adicionar referência .
  13. No menu arquivo , clique em Salvar tudo .
  14. No menu Build , clique em Build Solution . Durante a compilação de MyTestApplication, você receberá o erro descrito na seção "Sintomas".
Referências
Para obter mais informações, visite os seguintes sites do Microsoft Developer Network (MSDN) da:
Noções básicas do XML Web Services
http://msdn2.microsoft.com/en-us/library/ms996507.aspx

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 815131 - Última Revisão: 12/08/2015 02:05:50 - Revisão: 2.5

Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft .NET Framework 1.0, Microsoft .NET Framework 1.1

  • kbnosurvey kbarchive kbmt kbvs2002sp1sweep kbcodegen kbwebservices kbbug KB815131 KbMtpt
Comentários