在WCF服务中将Message类用作返回类型时出错

时间:2012-03-12 11:17:47

标签: json wcf message

我正在使用WCF服务。该服务是以字符串形式返回结果。当我运行应用程序时,我收到此错误消息。

  

无法加载“GetTemplate”操作,因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或者具有MessageContractAttribute的类型和其他不同类型的参数。使用System.ServiceModel.Channels.Message或使用MessageContractAttribute类型时,该方法不得使用任何其他类型的参数。

我的相应代码是这样的: 接口: -

[OperationContract]
[WebGet(
 ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "GetTemplate/templateid={templateID}"
        )]
    Message GetTemplate(string templateID);

实现: -

 public Message GetTemplate(string templateID)
    {
        string jsonText = TemplateManager.GetJSONTemplate(templateID);
        return WebOperationContext.Current.CreateTextResponse(jsonText,
         "application/json; charset=utf-8", Encoding.UTF8);
    }

当我用Google搜索时,我知道,在使用Message时,我们不能使用任何可序列化对象作为参数或返回类型。我想接受templateid作为参数,以获得相应的模板。有没有办法接受参数而没有这个错误?

提前致谢。

Vipin Menon

1 个答案:

答案 0 :(得分:1)

错误消息基本上转化为:使用Message类型是一个全有或全无的命题,如果你有一个消息类型输出,那么必须要么有一个Message参数用于操作,要么没有参数完全没有。您应该在使用WCF消息类型以及它可以为您做什么时阅读此old but good MSDN article。 Message类将编码抽象级别从使用标准.NET类降低到WCF“plumbing”级别,您可以在其中操作您的操作正在接收的soap XML消息,并手动创建操作将发送的soap XML消息。

目前尚不清楚为什么要尝试将Message用作返回类型,但不能以问题中示例代码的方式使用它。