我正在创建一个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; }
}
答案 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
)就是你正在做的那个,因此不能用于服务中的数据传输。