WCF Rest ERR_CONNECTION_RESET 响应不大

问题描述 投票:0回答:2

错误代码绝对是可怕的,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 iis
2个回答
5
投票

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

[DataContract]
public class UsageItem
{
[DataMember]
int ItemNumber;

public UsageItem(int ItemNumber)
  {
    this.ItemNumber = ItemNumber;


  }

}

2
投票

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

  1. diagnostics
    添加到
    web.config
    (取自此处):

       <?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.svclog
    WCFTrace.svclog

  3. 打开名为

    WCFMessages.svclog
    的文件。将打开“Microsoft Service Trace Viewer”窗口,以红色显示错误。
    如果没有显示错误,打开
    WCFTrace.svclog
    ,就会出现错误(红色)。

  • 就我而言,这是一个
    System.Runtime.Serialization
    错误,因为缺少
    DataContract
    属性。
© www.soinside.com 2019 - 2024. All rights reserved.