WCF问题

博客记录了WCF服务接收HTTP响应时出现错误的问题,长时间未找到原因后开始记录日志。通过查看日志发现是类型为“BabyCenterService.Entities.ActionResult”的“errmsg”属性无Set方法导致,分析得知该属性为只读,去掉[DataMember]标签可解决问题。

Wcf服务出现如下问题,

接收对 http://localhost:3476/BcService.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参见服务器日志。

以上问题找了很长时间,没有发现是什么原因,按如下方式,开始记录日志

<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "D:\Traces.svclog"/>
</listeners>
</source>
</sources>
</system.diagnostics>

双击 Traces.svclog文件,会打开 trace viewer,activity列表中红色字体就是有问题的条目,双击他,然后点击红色部分,发现有如下信息

 在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.Reply(MessageRpc&amp;amp; rpc)</StackTrace><ExceptionString>System.Runtime.Serialization.InvalidDataContractException: 没有类型为“BabyCenterService.Entities.ActionResult”,属性为“errmsg”的 Set 方法。

 

经分析:我的wcf服务方法统一返回 ActionResult的子类 

[DataContract]
public class ActionResult
{
[DataMember]
public string svrerr { get; set;}

[DataMember]
public string errmsg
{
get
{
try
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<Exception>(svrerr).Message;
}
catch
{
return svrerr;
}
}
}
}

这个 errmsg只读属性  只要把[DataMember]标签去掉就可以了

转载于:https://www.cnblogs.com/dlzh/p/11062235.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值