Click here to Skip to main content
12,065,316 members (42,336 online)
Rate this:
 
Please Sign up or sign in to vote.
See more: C# ASP.NET WCF
I have created a WCFservice.find the below interface service class

IService.cs
[ServiceContract]
    public interface IService
    {
        [OperationContract]
        DataSet GetStandards();
 
    }
Service.cs
[DataContract]
    [ExceptionShielding("ServicePolicy")]
    public class Service : IService 
    {
        
 
        public DataSet GetStandards()
        {
            Standard standard = new Standard();
            DataSet objResponseBE;
            objResponseBE = standard.GetStandards();
            return objResponseBE;
        }
 
    }
I have also created proxy class for that wcf service
Though that proxy class i am calling business layer and through business layer called DAL
in business layer GetStandard function which return object type in the DAL layer class function i am getting dataset which i am passing it to business layer function GetStandard where return type is object.When comming to this level i am not getting error.But when wcf service gets the response from business layer i am getting following error

There was an error while trying to serialize parameter
http://tempuri.org/:GetStandardsResult.The InnerException message was
'Type 'System.Data.DataSet' with data contract name 'DataSet:http://schemas.datacontract.org/2004/07/System.Data' is not expected.

Consider using a DataContractResolver or add any types not known statically to the list of known types - for example,
by using the KnownTypeAttribute attribute
or by adding them to the list of known types passed to DataContractSerializer.'.

but when i am passing datset in all layer funtion i am not getting error
But i want to pass object because always i am not getting dataset if i am getting error then how can i pass that.So for that i have used return type as object
please help me into this...
Posted 13-Jan-13 7:23am
Edited 13-Jan-13 10:46am
v4
Rate this: bad
 
good
Please Sign up or sign in to vote.

Solution 2

I would suggest that you don't transfer a DataSet but rather return a typed list.
[OperationContract]
List<StandardRecord> GetStandards();
There are two benefits:
  1. Efficiency - DataSet is a very complex type, and reconstructing it based on deserialization using refelction is costly
  2. Makes the intent behind the operation clearer
But if you really want to do this have a look at: Optimizing Serialization in .NET[^]

Best regards
Espen Harlinn
  Permalink  
Rate this: bad
 
good
Please Sign up or sign in to vote.

Solution 1

Follow the instructions as given by the error: [...] using the KnownTypeAttribute[^]attribute [...].
Cheers
Andi
  Permalink  
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month


Advertise | Privacy | Mobile
Web02 | 2.8.160204.4 | Last Updated 13 Jan 2013
Copyright © CodeProject, 1999-2016
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100