Read WebService List<> data

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Peter

    Read WebService List<> data

    I have a WebService which returns a List of RunningReport class
    How do I read this XML data on the client side. How do I convert
    List<RunningRep ortfrom the WebService side to List<RunningRep orton the
    client side

    I have tried the following:

    List<RunningRep ortreportList = null;

    localhost.Repor tService localrs = new localhost.Repor tService();
    localrs.Url = GetServiceURL() ;
    reportList = localrs.Running Reports();


    but I am getting the following error

    Error 67 Cannot implicitly convert type 'localhost.Runn ingReport[]' to
    'System.Collect ions.Generic.Li st<Reports.Modu les.RunningJobs .RunningReport>


    Thank You

    Peter


    //////////////// Heres' the XML data from the WebService
    ///////////////////////////////////

    <?xml version="1.0" encoding="utf-8" ?>
    ArrayOfRunningR eport xmlns:xsi="http ://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http ://www.w3.org/2001/XMLSchema"
    xmlns="http://wsinc.com/webservices/">
    <RunningRepor t>
    <ReportID>0</ReportID>
    <CreatedBy>12 </CreatedBy>
    <ItemId>1</ItemId>
    <OutputType>PDF </OutputType>
    </RunningReport>
    <RunningRepor t>
    <ReportID>0</ReportID>
    <CreatedBy>12 </CreatedBy>
    <ItemId>2</ItemId>
    <OutputType>PDF </OutputType>
    </RunningReport>
    </ArrayOfRunningR eport>


    ///////////////////////////////////// Here's the class that the Webservice
    is returning: ////////////////////////////////////////////

    using System;
    using System.Collecti ons.Generic;
    using System.Linq;
    using System.Text;

    namespace ReportInfoLib
    {
    [Serializable]
    public class RunningReport
    {
    private string _reportName;
    private int _reportID;
    private int _createdBy;
    private string _discription;
    private int _itemId;
    private DocumentTypeEnu m _outputType;
    private string _printerName;
    private string _trayName;
    private string _emailList;
    private List<ParameterN ameValue_pnv;

    public string ReportName
    {
    get { return this._reportNam e; }
    set { this._reportNam e = value; }
    }

    public int ReportID
    {
    get { return this._reportID; }
    set { this._reportID = value; }
    }

    public int CreatedBy
    {
    get { return this._createdBy ; }
    set { this._createdBy = value; }
    }

    public string Discription
    {
    get { return this._discripti on; }
    set { this._discripti on = value; }
    }

    public int ItemId
    {
    get { return this._itemId; }
    set { this._itemId = value; }
    }

    public ReportInfoLib.D ocumentTypeEnum OutputType
    {
    get { return this._outputTyp e; }
    set { this._outputTyp e = value; }
    }

    public string PrinterName
    {
    get { return this._printerNa me; }
    set { this._printerNa me = value; }
    }

    public string TrayName
    {
    get { return this._trayName; }
    set { this._trayName = value; }
    }

    public string EmailList
    {
    get { return this._emailList ; }
    set { this._emailList = value; }
    }

    public
    System.Collecti ons.Generic.Lis t<ReportInfoLib .ParameterNameV aluePnv
    {
    get { return this._pnv; }
    set { this._pnv = value; }
    }
    }
    }


  • John Saunders

    #2
    Re: Read WebService List&lt;&gt; data

    "Peter" <czupet@nospam. nospamwrote in message
    news:uq3PmHlKJH A.5904@TK2MSFTN GP02.phx.gbl...
    I have a WebService which returns a List of RunningReport class
    How do I read this XML data on the client side. How do I convert
    List<RunningRep ortfrom the WebService side to List<RunningRep orton the
    client side
    Sorry, it doesn't work this way.

    The client has no idea what type the server is using. Remember that the
    client could be running Java, in which case, it certainly doesn't know
    anything about List<RunningRep ort>.

    What the client _does_ know about is the XML Schema that it gets from the
    WSDL file that it gets from the server when you use Add Web Reference. That
    schema will have a section similar to this:

    <xs:element name="ArrayOfRu nningReport">
    <xs:complexType >
    <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="unbo unded" type="RunningRe port"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>

    Notice the total lack of mention of List<T>.

    Using ASMX web services (which you seem to be doing), that will always
    translate into RunningReport[] on the client. If you were using WCF, you'd
    be able to tell it to use List<Tinstead. Since you're using the old stuff,
    you'll have to fake it:

    List<RunningRep ortreportList ; //= null; Don't do this. The
    default is null, besides, it gets overwritten

    localhost.Repor tService localrs = new localhost.Repor tService();
    localrs.Url = GetServiceURL() ;
    RunningReports[] reportsArray = localrs.Running Reports();
    reportList = new List<RunningRep orts>(reportsAr ray);

    --
    John Saunders | MVP - Connected System Developer


    Comment

    • Peter

      #3
      Re: Read WebService List&lt;&gt; data


      "John Saunders" <no@dont.do.tha t.comwrote in message
      news:OcpE$lmKJH A.5448@TK2MSFTN GP05.phx.gbl...
      "Peter" <czupet@nospam. nospamwrote in message
      news:uq3PmHlKJH A.5904@TK2MSFTN GP02.phx.gbl...
      >I have a WebService which returns a List of RunningReport class
      >How do I read this XML data on the client side. How do I convert
      >List<RunningRe portfrom the WebService side to List<RunningRep orton
      >the client side
      >
      Sorry, it doesn't work this way.
      >
      The client has no idea what type the server is using. Remember that the
      client could be running Java, in which case, it certainly doesn't know
      anything about List<RunningRep ort>.
      >
      What the client _does_ know about is the XML Schema that it gets from the
      WSDL file that it gets from the server when you use Add Web Reference.
      That schema will have a section similar to this:
      >
      <xs:element name="ArrayOfRu nningReport">
      <xs:complexType >
      <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbo unded" type="RunningRe port"/>
      </xs:sequence>
      </xs:complexType>
      </xs:element>
      >
      Notice the total lack of mention of List<T>.
      >
      Using ASMX web services (which you seem to be doing), that will always
      translate into RunningReport[] on the client. If you were using WCF, you'd
      be able to tell it to use List<Tinstead. Since you're using the old
      stuff, you'll have to fake it:
      >
      List<RunningRep ortreportList ; //= null; Don't do this. The
      default is null, besides, it gets overwritten
      >
      localhost.Repor tService localrs = new localhost.Repor tService();
      localrs.Url = GetServiceURL() ;
      RunningReports[] reportsArray = localrs.Running Reports();
      reportList = new List<RunningRep orts>(reportsAr ray);
      >
      --
      John Saunders | MVP - Connected System Developer
      >
      >
      Thank You for your help!

      This the following line does not work:
      RunningReports[] reportsArray = localrs.Running Reports();

      Cannot implicitly convert type 'localhost.Runn ingReport[]' to
      'Reports.Module s.RunningJobs.R unningReport[]'


      Comment

      • Steven Cheng

        #4
        Re: Read WebService List&lt;&gt; data

        Hi Peter,

        The problem you encountered, is caused by XML webservice does not expose
        implement details to client(only expose WSDL service description) for
        interop purpose. Therefore, for any custom types used in webservice, by
        default the client-side will generate a light weight delegate class to
        represent it. That's why, for your scenario, it reports the following error:

        =============== =
        Cannot implicitly convert type 'localhost.Runn ingReport[]' to
        'Reports.Module s.RunningJobs.R unningReport[]'
        ===============

        here the "localhost.Runn ingReport" type is generated by the webservice
        client proxy(add webreference), while
        "Reports.Module s.RunningJobs.R unningReport" is your own type(the type used
        at server-side).

        Currently one way to overcome this problem is manually modify the
        auto-generated webservice proxy's source code. You can change the return
        type from the "localhost.Runn ingReport[]" to
        "Reports.Module s.RunningJobs.R unningReport[]". The drawback of this is
        when you update the webservice refefence, your change will be overwritten.
        To avoid this, you can add a partial class file for the webservice clienet
        proxy class, and add a new method (the same signature and attributes as the
        original webmethod), and chang the return type to the one you want.

        Hope this helps.

        Sincerely,

        Steven Cheng

        Microsoft MSDN Online Support Lead


        Delighting our customers is our #1 priority. We welcome your comments and
        suggestions about how we can improve the support we provide to you. Please
        feel free to let my manager know what you think of the level of service
        provided. You can send feedback directly to my manager at:
        msdnmg@microsof t.com.

        =============== =============== =============== =====
        Get notification to my posts through email? Please refer to
        http://msdn.microsoft.com/en-us/subs...#notifications.
        =============== =============== =============== =====
        This posting is provided "AS IS" with no warranties, and confers no rights.
        --------------------
        >From: "Peter" <czupet@nospam. nospam>
        >References: <uq3PmHlKJHA.59 04@TK2MSFTNGP02 .phx.gbl>
        <OcpE$lmKJHA.54 48@TK2MSFTNGP05 .phx.gbl>
        >Subject: Re: Read WebService List<data
        >Date: Thu, 9 Oct 2008 21:19:42 -0500
        >
        >
        >"John Saunders" <no@dont.do.tha t.comwrote in message
        >news:OcpE$lmKJ HA.5448@TK2MSFT NGP05.phx.gbl.. .
        >"Peter" <czupet@nospam. nospamwrote in message
        >news:uq3PmHlKJ HA.5904@TK2MSFT NGP02.phx.gbl.. .
        >>I have a WebService which returns a List of RunningReport class
        >>How do I read this XML data on the client side. How do I convert
        >>List<RunningR eportfrom the WebService side to List<RunningRep orton
        >>the client side
        >>
        >Sorry, it doesn't work this way.
        >>
        >The client has no idea what type the server is using. Remember that the
        >client could be running Java, in which case, it certainly doesn't know
        >anything about List<RunningRep ort>.
        >>
        >What the client _does_ know about is the XML Schema that it gets from
        the
        >WSDL file that it gets from the server when you use Add Web Reference.
        >That schema will have a section similar to this:
        >>
        ><xs:element name="ArrayOfRu nningReport">
        ><xs:complexTyp e>
        ><xs:sequence >
        ><xs:element minOccurs="0" maxOccurs="unbo unded" type="RunningRe port"/>
        ></xs:sequence>
        ></xs:complexType>
        ></xs:element>
        >>
        >Notice the total lack of mention of List<T>.
        >>
        >Using ASMX web services (which you seem to be doing), that will always
        >translate into RunningReport[] on the client. If you were using WCF,
        you'd
        >be able to tell it to use List<Tinstead. Since you're using the old
        >stuff, you'll have to fake it:
        >>
        >List<RunningRe portreportList ; //= null; Don't do this. The
        >default is null, besides, it gets overwritten
        >>
        >localhost.Repo rtService localrs = new localhost.Repor tService();
        >localrs.Url = GetServiceURL() ;
        >RunningRepor ts[] reportsArray = localrs.Running Reports();
        >reportList = new List<RunningRep orts>(reportsAr ray);
        >>
        >--
        >John Saunders | MVP - Connected System Developer
        >>
        >>
        >
        >Thank You for your help!
        >
        >This the following line does not work:
        >RunningRepor ts[] reportsArray = localrs.Running Reports();
        >
        >Cannot implicitly convert type 'localhost.Runn ingReport[]' to
        >'Reports.Modul es.RunningJobs. RunningReport[]'
        >
        >
        >

        Comment

        • John Saunders

          #5
          Re: Read WebService List&lt;&gt; data

          ""Steven Cheng"" <stcheng@online .microsoft.comw rote in message
          news:hMghUFqKJH A.1804@TK2MSFTN GHUB02.phx.gbl. ..
          Hi Peter,
          >
          The problem you encountered, is caused by XML webservice does not expose
          implement details to client(only expose WSDL service description) for
          interop purpose. Therefore, for any custom types used in webservice, by
          default the client-side will generate a light weight delegate class to
          represent it. That's why, for your scenario, it reports the following
          error:
          >
          =============== =
          Cannot implicitly convert type 'localhost.Runn ingReport[]' to
          'Reports.Module s.RunningJobs.R unningReport[]'
          ===============
          >
          here the "localhost.Runn ingReport" type is generated by the webservice
          client proxy(add webreference), while
          "Reports.Module s.RunningJobs.R unningReport" is your own type(the type used
          at server-side).
          >
          Currently one way to overcome this problem is manually modify the
          auto-generated webservice proxy's source code. You can change the return
          type from the "localhost.Runn ingReport[]" to
          "Reports.Module s.RunningJobs.R unningReport[]". The drawback of this is
          when you update the webservice refefence, your change will be overwritten.
          To avoid this, you can add a partial class file for the webservice clienet
          proxy class, and add a new method (the same signature and attributes as
          the
          original webmethod), and chang the return type to the one you want.
          As Steven has said, this will not work, as it will be overwritten every time
          you update your web reference.

          The correct solution is simply to use:

          localhost.Runni ngReports[] reportsArray = localrs.Running Reports();
          --
          John Saunders | MVP - Connected System Developer


          Comment

          • Peter

            #6
            Re: Read WebService List&lt;&gt; data


            "John Saunders" <no@dont.do.tha t.comwrote in message
            news:OnfcfsqKJH A.1500@TK2MSFTN GP06.phx.gbl...
            ""Steven Cheng"" <stcheng@online .microsoft.comw rote in message
            news:hMghUFqKJH A.1804@TK2MSFTN GHUB02.phx.gbl. ..
            >Hi Peter,
            >>
            >The problem you encountered, is caused by XML webservice does not expose
            >implement details to client(only expose WSDL service description) for
            >interop purpose. Therefore, for any custom types used in webservice, by
            >default the client-side will generate a light weight delegate class to
            >represent it. That's why, for your scenario, it reports the following
            >error:
            >>
            >============== ==
            >Cannot implicitly convert type 'localhost.Runn ingReport[]' to
            >'Reports.Modul es.RunningJobs. RunningReport[]'
            >============== =
            >>
            >here the "localhost.Runn ingReport" type is generated by the webservice
            >client proxy(add webreference), while
            >"Reports.Modul es.RunningJobs. RunningReport" is your own type(the type
            >used
            >at server-side).
            >>
            >Currently one way to overcome this problem is manually modify the
            >auto-generated webservice proxy's source code. You can change the return
            >type from the "localhost.Runn ingReport[]" to
            >"Reports.Modul es.RunningJobs. RunningReport[]". The drawback of this is
            >when you update the webservice refefence, your change will be
            >overwritten.
            >To avoid this, you can add a partial class file for the webservice
            >clienet
            >proxy class, and add a new method (the same signature and attributes as
            >the
            >original webmethod), and chang the return type to the one you want.
            >
            As Steven has said, this will not work, as it will be overwritten every
            time you update your web reference.
            >
            The correct solution is simply to use:
            >
            localhost.Runni ngReports[] reportsArray = localrs.Running Reports();
            --
            John Saunders | MVP - Connected System Developer
            >
            >
            Thank You for your help, that worked!

            I also switched to WCF, which works very nice.


            Comment

            • Steven Cheng

              #7
              Re: Read WebService List&lt;&gt; data

              Hi Peter,

              I'm glad that you've got it working. If there is anything else need help
              later, welcome to post here.

              Sincerely,

              Steven Cheng

              Microsoft MSDN Online Support Lead


              Delighting our customers is our #1 priority. We welcome your comments and
              suggestions about how we can improve the support we provide to you. Please
              feel free to let my manager know what you think of the level of service
              provided. You can send feedback directly to my manager at:
              msdnmg@microsof t.com.


              --------------------
              >From: "Peter" <czupet@nospam. nospam>
              >References: <uq3PmHlKJHA.59 04@TK2MSFTNGP02 .phx.gbl>
              <OcpE$lmKJHA.54 48@TK2MSFTNGP05 .phx.gbl>
              <eDcso6nKJHA.30 80@TK2MSFTNGP06 .phx.gbl>
              <hMghUFqKJHA.18 04@TK2MSFTNGHUB 02.phx.gbl>
              <OnfcfsqKJHA.15 00@TK2MSFTNGP06 .phx.gbl>
              >Subject: Re: Read WebService List<data
              >Date: Fri, 10 Oct 2008 16:17:19 -0500
              >
              >"John Saunders" <no@dont.do.tha t.comwrote in message
              >news:OnfcfsqKJ HA.1500@TK2MSFT NGP06.phx.gbl.. .
              >""Steven Cheng"" <stcheng@online .microsoft.comw rote in message
              >news:hMghUFqKJ HA.1804@TK2MSFT NGHUB02.phx.gbl ...
              >>Hi Peter,
              >>>
              >>The problem you encountered, is caused by XML webservice does not expose
              >>implement details to client(only expose WSDL service description) for
              >>interop purpose. Therefore, for any custom types used in webservice, by
              >>default the client-side will generate a light weight delegate class to
              >>represent it. That's why, for your scenario, it reports the following
              >>error:
              >>>
              >>============= ===
              >>Cannot implicitly convert type 'localhost.Runn ingReport[]' to
              >>'Reports.Modu les.RunningJobs .RunningReport[]'
              >>============= ==
              >>>
              >>here the "localhost.Runn ingReport" type is generated by the webservice
              >>client proxy(add webreference), while
              >>"Reports.Modu les.RunningJobs .RunningReport" is your own type(the type
              >>used
              >>at server-side).
              >>>
              >>Currently one way to overcome this problem is manually modify the
              >>auto-generated webservice proxy's source code. You can change the return
              >>type from the "localhost.Runn ingReport[]" to
              >>"Reports.Modu les.RunningJobs .RunningReport[]". The drawback of this is
              >>when you update the webservice refefence, your change will be
              >>overwritten .
              >>To avoid this, you can add a partial class file for the webservice
              >>clienet
              >>proxy class, and add a new method (the same signature and attributes as
              >>the
              >>original webmethod), and chang the return type to the one you want.
              >>
              >As Steven has said, this will not work, as it will be overwritten every
              >time you update your web reference.
              >>
              >The correct solution is simply to use:
              >>
              >localhost.Runn ingReports[] reportsArray = localrs.Running Reports();
              >--
              >John Saunders | MVP - Connected System Developer
              >>
              >>
              >
              >Thank You for your help, that worked!
              >
              >I also switched to WCF, which works very nice.
              >
              >
              >

              Comment

              Working...