Click here to Skip to main content
Rate this: bad
good
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 6:23am
Edited 13-Jan-13 9: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
0 Sergey Alexandrovich Kryukov 369
1 _Amy 230
2 OriginalGriff 220
3 Peter Leow 205
4 Andreas Gieriet 180
0 OriginalGriff 7,540
1 Sergey Alexandrovich Kryukov 6,412
2 Maciej Los 3,849
3 Peter Leow 3,653
4 CHill60 2,702


Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 13 Jan 2013
Copyright © CodeProject, 1999-2014
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