WCF连接重置

问题描述:

我创建了一个WCF服务,并且在将它连接到WinForms客户端时它工作正常。但我想通过浏览器访问它。有些方法工作正常,但是当我试图发送包含多个对象的对象时,它会返回错误消息“连接已重置”......我试图用ARC和JQuery Ajax测试我的服务,并且所有的情况下,我收到了同样的错误。WCF连接重置

我几乎忘记告诉你,这个问题只发生在我创建Period属性的实例时。如果我清楚地返回对象,那么我没有任何问题。

我分享给你一个基于原始代码的测试。我希望你能帮助我。

WCF服务

​​

预注册响应

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ServiceModel; 
using System.ServiceModel.Web; 
using MercSoft.Conservatorio.DataModels; 
using System.Runtime.Serialization; 
using MercSoft.Conservatorio.Request; 

namespace MercSoft.Conservatorio.Response 
{ 
    [DataContract] 
    public class PreRegisterResponse : BaseResponse 
    { 
      [DataMember] 
      public PreRegisterDataModel Period { get; set; } 

      public PreRegisterResponse() 
       : base() 
      { 
      } 
    } 
} 

PreRegisterDataModel

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.Text; 

namespace MercSoft.Conservatorio.DataModels 
{ 
    [DataContract(IsReference=true)] 
    public class SystemPeriodsDataModel 
    { 
     [DataMember] 
     public int Id { get; set; } 
     [DataMember] 
     public int PeriodType { get; set; } 
     [DataMember] 
     public String PeriodTypeString { get; set; } 
     [DataMember] 
     public DateTime? StartDate { get; set; } 
     [DataMember] 
     public DateTime? EndDate { get; set; } 
     [DataMember] 
     public String DatePeriod { get; set; } 
     [DataMember] 
     public bool WithInstument { get; set; } //Pre-register ONLY 
     [DataMember] 
     public bool Active { get; set; } 
    } 
} 

WebConfig

<?xml version="1.0"?> 
     <configuration> 

      <appSettings> 
      <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
      </appSettings> 
      <system.web> 
      <compilation debug="true" targetFramework="4.5" /> 
      <httpRuntime targetFramework="4.5"/> 
      </system.web> 
      <system.serviceModel> 
      <services> 
       <service name="Mercsoft.Conserv.WSv2.Conservatorio"> 
       <endpoint address="" behaviorConfiguration="Mercsoft.Conserv.WSv2.ConservatorioAspNetAjaxBehavior" 
      binding="webHttpBinding" contract="Mercsoft.Conserv.WSv2.Conservatorio" /> 
       </service> 
     </services> 
     <behaviors> 
      <endpointBehaviors> 
      <behavior name="Mercsoft.Conserv.WSv2.ConservatorioAspNetAjaxBehavior"> 
       <enableWebScript /> 
      </behavior> 
      </endpointBehaviors> 
      <serviceBehaviors> 
      <behavior name=""> 
       <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="false" /> 
      </behavior> 
      </serviceBehaviors> 
     </behaviors> 
     <protocolMapping> 
      <add binding="basicHttpsBinding" scheme="https" /> 
     </protocolMapping>  
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
     multipleSiteBindingsEnabled="true" /> 
     </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 

</configuration> 

我刚刚在我正在使用的WCF服务中发现了一段代码,即(现在)正在使用webHttpBinding(对于REST客户端)。罪魁祸首是DataContract类中的属性“IsReference = true”。我需要将该标志设置为TRUE,因为对象的图形包含循环引用;这样返回的响应比真实对象被序列化的字节少得多。

我不知道为什么这与SOAP和其他绑定协同工作,但不能与webHttpBinding协同工作,但由于我需要添加REST支持,因此当返回带有IsReference = true的DataContract类时,服务停止工作。

我的临时解决方案是创建另一个具有与原始属性相同的类,但没有IsReference属性。我需要进一步调查,但同时我希望这有助于。