在WCF服务中传递用户定义的参数导致问题

时间:2012-12-11 12:30:08

标签: c# .net wcf

我正在创建一个wcf自托管服务。我正在使用UriTemplate类来自定义方法的URL。代码段在下面给出

 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);

     }

每当我运行此程序时,我都会收到以下错误

  

合同'ISelfHostService'中的'FileChanged'操作有一个查询   名为'metainfo'的变量,类型为'Natash.Common.MetaInformation',   但输入'Natash.Common.MetaInformation'不可转换   'QueryStringConverter'。 UriTemplate查询值的变量必须   具有可以通过'QueryStringConverter'转换的类型

任何人都可以告诉我为什么会这样吗?

而且,我没有对web.config文件进行任何修改。我需要在那里进行任何修改吗?

MetaInformation定义如下

[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; }
}

2 个答案:

答案 0 :(得分:1)

试试这个

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);}

[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);}

答案 1 :(得分:0)

从您发布的消息中可以看出,MetaInformation类有两个定义(Gettrix.Common.MetaInformation& Natash.Common.MetaInformation)。

可能两者都在WCF的范围内,以便在实例化服务时查看。如果是这样,它可能会认为没有DataContract属性的那个(可能是Natash.Common.MetaInformation)就是你正在做的那个,因此不能用于服务中的数据传输。