wcf返回值报错解析
问题来源
最近在项目中使用wcf,因为是一个新手,对新的东西总是比较敬畏,不过一切都是进行得很顺利,运行的时候,突然报了错,编译器提示的错误大概是:“InvalidOperationException:无法加载操作“UploadResourceNotInDb”,它具有类型为 System.ServiceModel.Channels.Message 的参数或返回类型,或具有一个带有 MessageContractAttribute 及其他不同类型参数的类型。”!
服务契约(Service Contract)和消息契约(Message Contract)如下:
[ServiceContract(Name = "ResourceFile")]
public interface ISysResourceSyncService : IBaseService
{ /// <summary>
/// 同步到服务器端,不会记录到数据库,仅仅是同步文件到服务器端
/// </summary>
/// <param name="ResourceFile"></param> [OperationContract]
void UploadResourceNotInDb(ResourceFile ResourceFile);
} [MessageContract]
public class ResourceFile
{
[MessageBodyMember]
public Stream ResourceBody { get; set; } [MessageHeader]
public string ResourceName { get; set; } [MessageHeader]
public string ResourcePath { get; set; } [MessageHeader]
public string ReflectEntity { get; set; } [MessageHeader]
public string FieldName { get; set; } [MessageHeader]
public int EntityId { get; set; }
}
问题查找
给经过查找不同的资料,发现在http://msdn.microsoft.com/zh-cn/library/ms730255.aspx,找到了问题解决办法。
英文解析:
A messaging-style operation has at most one parameter and one return
value where both types are message types; that is, they serialize
directly into a specified SOAP message structure. This may be any type
marked with the MessageContractAttribute or the Message type.
中文解析:
即:如果一个服务契约(Service Contract)的某个服务操作(operation)是基于消息类型(messaging-style)的,则这个服务操作(operation)必须:
最多有一个输入参数
最多有一个返回类型
输入参数和返回类型必须是消息类型(message type,如消息契约或者Message类型的参数)的。当然可以不返回,为void。
意思都很明白了,那就着手修改一下!
解决办法
把返回bool改回void或者消息类型,即可!完美运行!
扩展知识
另外,在定义应用于流(stream)传输的消息契约(Message Contract)时:
一、SOAP主体(即,[MessageBodyMember]应用的属性)只能有一个,即 public System.IO.Stream FileData { get; set; }
二、SOAP报头(即,[MessageHeader]应用的属性)可以有多个,传输文件名,大小,时间等。
为了提高性能,可以将多个报头合成一个报头,那就必须利用数据契约(Data Contract)来合成多个数据。
wcf返回值报错解析的更多相关文章
- C编译器中“不是所有的控件路径都返回值”报错
编译器的判断逻辑是是否在所有的分支中都返回了值,即if不成立时也必须返回值.编译器认为如果三个if都不成立则此函数可能没有返回值,故报错.需要将第三个if改为else或者去掉if体直接return.
- spring boot 开发 ajax返回值报错
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "succeed", templ ...
- 使用wkwebview时,push后,再pop返回,报错
使用wkwebview时,push后,再pop返回,报错 Cannot form weak reference to instance (xxxx) of class xxxx. It is poss ...
- java -- SSM配置完成后,能访问jsp文件不能访问html文件,报错解析
SSM配置完成后,能访问jsp文件不能访问html文件,报错解析 在确保路径没有任何问题的,情况下,相同的页面,jsp能够正常访问,html却不能正常访问(404). 解决方法: 在web.xml中添 ...
- C# ODP.NET 调用Oracle函数返回值时报错的一个解决方案
有人在社区问到:C#调用Oracle中自定义函数的返回值时,无法正常调用.但在PL/SQL中正常调用返回. 于是动手一试: 1.准备函数(Oralce 11g.2.0.0.4) CREATE OR R ...
- spring使用jackson返回object报错:Handler execution resulted in exception: Could not find acceptable representation
问题:在springmvc中添加Jackson jar包返回Object类型,处理器方法的produces属性不写,默认根据类型,但如果指定了(错误原因)produces = "text/h ...
- redis取值报错
> get "all_couriers_on_the_job" (error) ERR Operation against a key holding the wrong k ...
- mybatis mapper.xml 写关联查询 运用 resultmap 结果集中 用 association 关联其他表 并且 用 association 的 select 查询值 报错 java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for mybatis.map
用mybaits 写一个关联查询 查询商品表关联商品规格表,并查询规格表中的数量.价格等,为了sql重用性,利用 association 节点 查询 结果并赋值报错 商品表的mapper文件为Gooo ...
- MySQL数据库储存bit类型的值报错
当我们储存bit类型的值时,不能直接写入数字 上图中的画圈部分就是bit类型,若是直接填入"1"或"0"等等就会报错,如下: 这时候,我们要看bit(M)的M值 ...
随机推荐
- mysql的一些配置优化
[mysqld]lower_case_table_names=1datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Di ...
- VMware设置inter共享连接出现空值
1.打开“网络和共享中心”选择“VMware Virtual Ethernet Adapter for VMnet8”网卡右键属性,选择VMware Bridge Protocol,同时设置ip自动获 ...
- 百度地图经纬度和地址互转(Java代码)
这是基于springmvc+mybatis 的一个controller.如果不是这个框架,可以把方法实体抽到自己写的一个类中,然后再测试 package com.uwitec.controller.s ...
- 已经安装了客户端,但是cmd输入sqlcmd报错:Sqlcmd:Error:Connection failure.SQL Native Client is not installed correctly
以前安装了sqlserver2008,没有卸载掉,后面又安装了sqlserver2014,所以系统环境变量中既有2008的环境变量的配置,又有2014的环境变量的配置,所以在终端输入sqlcmd时报错 ...
- C++ MFC棋牌类小游戏day1
好用没用过C++做一个完整一点的东西了,今天开始希望靠我这点微薄的技术来完成这个小游戏. 我现在的水平应该算是菜鸟中的战斗鸡了,所以又很多东西在设计和技术方面肯定会有很大的缺陷,我做这个小游戏的目的单 ...
- Java之spilt()函数,trim()函数
一.单个符号作为分隔符 package com.regix; public class FuncSpilt { public static void main(String[] args) { // ...
- 第二章(java程序设计)第三章(语言基础)
第二章 2.1 对象 对象的概念是由现实世界引入问题模型: 对象包含有:状态和行为.具体地来说是: 数据封装:对象的方法的作用就是:将内部变量封装起来,提供给外界交互的窗口.(实现对数据的隐藏) 继承 ...
- arguments[0]()的详解
var length = 10; function fn(){ console.log(this.length); } var obj = { length:5, method:function(fn ...
- linux 定时器 定时执行php
输入命令: crontab -e 添加定时命令 每隔一分钟执行一次php //复制一下命令即可. */1 * * * * /usr/bin/curl -o /home/logs/temp.lo ...
- 学以致用十二-----YouCompeteMe巨坑
接上一篇,通过这几天的不断尝试,发现一个无法解决的问题.至于我安装成功的那台,我至今不知道是安装了哪一步导致成功的. 首先,我在.vimrc里加上了 Plugin 'Valloric/YouComp ...