我正在使用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
答案 0 :(得分:1)
错误消息基本上转化为:使用Message类型是一个全有或全无的命题,如果你有一个消息类型输出,那么必须要么有一个Message参数用于操作,要么没有参数完全没有。您应该在使用WCF消息类型以及它可以为您做什么时阅读此old but good MSDN article。 Message类将编码抽象级别从使用标准.NET类降低到WCF“plumbing”级别,您可以在其中操作您的操作正在接收的soap XML消息,并手动创建操作将发送的soap XML消息。
目前尚不清楚为什么要尝试将Message用作返回类型,但不能以问题中示例代码的方式使用它。