WCF Rest ERR_CONNECTION_RESET 响应不大
Posted
技术标签:
【中文标题】WCF Rest ERR_CONNECTION_RESET 响应不大【英文标题】:WCF Rest ERR_CONNECTION_RESET not large response 【发布时间】:2014-12-18 07:10:03 【问题描述】:错误代码非常糟糕,ERR_CONNECTION_RESET 有很多原因,我在其他问题上发现的原因与大型 Web 服务调用的 MaxRequestLength 太小有关。我返回的数据只有几 kB,所以这不是问题。
这是我的界面代码
[WebGet(RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "GetReportByID?ReportID=ReportID")]
[OperationContract]
UsageReport GetReportByID(int ReportID);
这就是实现
public UsageReport GetReportByID(int ReportID)
return new UsageReport(ReportID);
这是 UsageReport 的类代码
[DataContract]
public class UsageReport
[DataMember]
List<UsageItem> RL;
public UsageReport(int reportID)
RL = new List<UsageItem>();
using (SqlDataReader dr = DBUtility.ExecuteReader(cmd, "DBString"))
while (dr.Read())
ItemNumber = dr["ItemID"] as int? ?? 0;
RL.Add(new UsageItem(ItemNumber));
dr.Close();
public class UsageItem
int ItemNumber;
public UsageItem(int ItemNumber)
this.ItemNumber = ItemNumber;
【问题讨论】:
【参考方案1】:问题是我的 UsageItem 类,我缺少必要的 DataContract 和 DataMember 字段。
[DataContract]
public class UsageItem
[DataMember]
int ItemNumber;
public UsageItem(int ItemNumber)
this.ItemNumber = ItemNumber;
【讨论】:
有没有办法使用 WCF 服务而不指定DataContract
和 DataMember
,因为有很多类?
***.com/questions/4836683/… 这个答案声称可以,但显然这样做会失去很多好处。
请检查我的问题,我想同时使用JSON.Net
和WCF
。 ***.com/questions/29754874/…
非常感谢,DaneEdw。我浪费了 4 个小时试图找出我的连接被重置的原因。你的回答救了我。
如果将 DataMember 应用于属性,它必须包含一个 set
才能序列化(即,它不能是只读的)。提示:集合可以为空;)【参考方案2】:
我想添加一个与服务器端使用WCF的情况相关的解决方案:
将diagnostics
添加到web.config
(取自here):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.diagnostics>
<sources>
<source name="System.Net" switchValue="Verbose">
<listeners>
<add name="SystemNetTrace"/>
</listeners>
</source>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" propagateActivity="true">
<listeners>
<add name="wcftrace" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose, ActivityTracing">
<listeners>
<add name="wcfmessages" />
</listeners>
</source>
<source name="System.Runtime.Serialization" switchValue="Verbose">
<listeners>
<add name="wcfmessages" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="SystemNetTrace" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, Callstack" initializeData="C:\Traces\System_Net.txt" />
<add name="wcftrace" type="System.Diagnostics.XmlWriterTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, Callstack" initializeData="C:\Traces\WCFTrace.svclog" />
<add name="wcfmessages" type="System.Diagnostics.XmlWriterTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, Callstack" initializeData="C:\Traces\WCFMessages.svclog" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
重现错误,然后转到跟踪文件夹(在此示例中为C:\Traces
)。那里将有 2 个svclog
文件:WCFMessages.svclog
和 WCFTrace.svclog
。
打开名为WCFMessages.svclog
的文件。将打开一个“Microsoft 服务跟踪查看器”窗口,以红色显示错误。
如果没有显示错误,打开WCFTrace.svclog
,错误(红色)就会出现。
System.Runtime.Serialization
错误,因为缺少DataContract
属性。
【讨论】:
以上是关于WCF Rest ERR_CONNECTION_RESET 响应不大的主要内容,如果未能解决你的问题,请参考以下文章