Click here to Skip to main content
15,885,537 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
I have created a WCFservice.find the below interface service class

IService.cs
C#
[ServiceContract]
    public interface IService
    {
        [OperationContract]
        DataSet GetStandards();

    }

Service.cs
C#
[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 <br />
'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
Updated 13-Jan-13 9:46am
v4

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
 
Share this answer
 
Follow the instructions as given by the error: [...] using the KnownTypeAttribute[^]attribute [...].
Cheers
Andi
 
Share this answer
 
v2

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900