0

我正在创建一个 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; }
}
4

2 回答 2

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

于 2012-12-12T08:26:58.193 回答
0

从您发布的消息看来,MetaInformation 类 ( Gettrix.Common.MetaInformation& Natash.Common.MetaInformation) 有 2 个定义。

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

于 2012-12-11T17:54:26.050 回答