Wcf Error (Message part XXXXXResult in namespace http://tempuri.org/ appears more than once in Message.)

Wcf Error (Message part XXXXXResult in namespace http://tempuri.org/ appears more than once in Message.)


前言:
我写了一个Wcf之后在调用时发生执行阶段错误
错误码如下
Message part EventSnReceiveResult in namespace http://tempuri.org/ appears more than once in Message.
查Google又找不太到相关文章于是就开始今天的Debug之旅...
旅途我就不多说,直接跳心得部分吧!

说明:


Wcf界面interface中定义一个作业合约EventSnReceive

[OperationContract]
        int EventSnReceive(string EventCode, out int EventSnReceiveMessage);


Wcf中继数据wsdl自动生成xml

















由此可知Wcf架构下的方法回传值(return)是以方法名称其后附加"Result"来表示

并且在回传值在wcf链时是与out参数一同序列化
这意味着如果我们将out参数名称定义为方法名称其后附加"Result"时
将会与Return值的Wcf定义名称发生冲突

请注意看下列wsdl->xml->EventSnReceiveResponse->EventSnReceiveResult
由于重复所以最后产生的wsdl将会只有一个EventSnReceiveResult但是wcf内其实是包含return与out
因此程序无法将其对应并产生执行阶段错误



Wcf界面interface中定义一个作业合约EventSnReceive

[OperationContract]
        int EventSnReceive(string EventCode, out int EventSnReceiveResult);



Wcf中继数据wsdl自动生成xml



>











结论:
所以避免用 {[方法名称]+"Result"} 的方式来命名 out 参数即可避免此Bug
(Message part EventSnReceiveResult in namespace http://tempuri.org/ appears more than once in Message.)