【问题标题】:Error when using Message class as return type in WCF service在 WCF 服务中使用 Message 类作为返回类型时出错
【发布时间】:2012-03-12 11:17:46
【问题描述】:

我正在使用 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);
    }

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

提前致谢。

维平梅农

【问题讨论】:

    标签: json wcf message


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 Sixto Saez。我修复了它。我将返回类型从消息更改为流。现在它工作正常。我使用 Message 作为返回类型,以获得干净的 Jason 输出。当作为字符串返回时,结果是有转义字符。使用无参数时,消息工作正常。
    • 是的,如果您不需要进入带有标头等的 WCF 管道,那么 Stream 是您的最佳选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多