【问题标题】:WCF Rest ERR_CONNECTION_RESET not large responseWCF Rest ERR_CONNECTION_RESET 响应不大
【发布时间】: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;

    }

}

【问题讨论】:

    标签: wcf


    【解决方案1】:

    问题是我的 UsageItem 类,我缺少必要的 DataContract 和 DataMember 字段。

    [DataContract]
    public class UsageItem
    {
    [DataMember]
    int ItemNumber;
    
    public UsageItem(int ItemNumber)
      {
        this.ItemNumber = ItemNumber;
    
    
      }
    
    }
    

    【讨论】:

    • 有没有办法使用 WCF 服务而不指定 DataContractDataMember,因为有很多类?
    • stackoverflow.com/questions/4836683/… 这个答案声称可以,但显然这样做会失去很多好处。
    • 请检查我的问题,我想同时使用JSON.NetWCFstackoverflow.com/questions/29754874/…
    • 非常感谢,DaneEdw。我浪费了 4 个小时试图找出我的连接被重置的原因。你的回答救了我。
    • 如果将 DataMember 应用于属性,它必须包含一个 set 才能序列化(即,它不能是只读的)。提示:集合可以为空;)
    【解决方案2】:

    我想添加一个与服务器端使用WCF的情况相关的解决方案:

    1. 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>
      
    2. 重现错误,然后转到跟踪文件夹(在此示例中为C:\Traces)。那里将有 2 个svclog 文件:WCFMessages.svclogWCFTrace.svclog

    3. 打开名为WCFMessages.svclog 的文件。将打开一个“Microsoft 服务跟踪查看器”窗口,以红色显示错误。
      如果没有显示错误,打开WCFTrace.svclog,错误(红色)就会出现。

    • 就我而言,这是一个System.Runtime.Serialization 错误,因为缺少DataContract 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      相关资源
      最近更新 更多