logeeks
logeeks

Reputation: 4979

passing user defined parameters in WCF service causing problems

I am creating a wcf self hosted service. I am using UriTemplate class to customize the urls to methods. the code snippet is given below

 public interface ISelfService
    {
        [WebInvoke(Method = "POST", UriTemplate = "ack/{errorcode}/{uniquefileid}")]
        [OperationContract]
        void Ack(ErrorCode errorcode, string uniquefileid);

       [WebInvoke(Method = "POST", UriTemplate = "filechanged/{metainfo}")]
       [OperationContract]
       void FileChanged(MetaInformation metainfo);

     }

Whenever i run this program i am getting the following error

Operation 'FileChanged' in contract 'ISelfHostService' has a query variable named 'metainfo' of type 'Natash.Common.MetaInformation', but type 'Natash.Common.MetaInformation' is not convertible by 'QueryStringConverter'. Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'

Can any one tell me why is this happening?

And, I have not made any modification to the web.config file. Do i need to make any modification there?

MetaInformation is defined as follows

[DataContract]
    public struct MetaInformation
    {
        [DataMember]
        public string Author { get; set; }
        [DataMember]
        public string tags { get; set; }
        [DataMember]
        public string categories { get; set; }
        [DataMember]
        public string description { get; set; }
}

Upvotes: 0

Views: 932

Answers (2)

Sarath Nair
Sarath Nair

Reputation: 2868

try this

public interface ISelfService{

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/ack?errorcode={errorcode}&uniquefileid={uniquefileid}")]
    void Ack(ErrorCode errorcode, string uniquefileid);

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/filechanged")]
    void FileChanged(MetaInformation metainfo);}

Upvotes: 1

Eric
Eric

Reputation: 464

From the message you posted it sounds like there are 2 definitions for the MetaInformation class (Gettrix.Common.MetaInformation & Natash.Common.MetaInformation).

It could be that both are in scope for WCF to see when instantiating the service. If so, it might think that the one that does not have a DataContract attribute (probably Natash.Common.MetaInformation) is what you are reffering to and therefore would not be usable for data transfer within the service.

Upvotes: 0

Related Questions