Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 对WCF服务的调用有时会挂起_Asp.net_.net_Wcf_Odata - Fatal编程技术网

Asp.net 对WCF服务的调用有时会挂起

Asp.net 对WCF服务的调用有时会挂起,asp.net,.net,wcf,odata,Asp.net,.net,Wcf,Odata,这个问题最初是在一个WCF数据服务(OData)上遇到的,该服务返回了大量数据(~3MB),而使用数据的应用程序(一个MVC网站)会偶尔挂起一些请求,最终会超时 这个问题可以在较小的数据有效负载上复制,但需要很长时间才能发生。这一问题在卡西尼号和IIS7上都被复制。在运行IIS时,我可以看到挂起的W3工作进程一直处于“SendResponse”状态,直到超时 为了缩小问题的原因,我创建了一个控制台应用程序,可以从ASP.NET站点按顺序下载内容。该问题在WCF数据服务(OData)、标准WCF服

这个问题最初是在一个WCF数据服务(OData)上遇到的,该服务返回了大量数据(~3MB),而使用数据的应用程序(一个MVC网站)会偶尔挂起一些请求,最终会超时

这个问题可以在较小的数据有效负载上复制,但需要很长时间才能发生。这一问题在卡西尼号和IIS7上都被复制。在运行IIS时,我可以看到挂起的W3工作进程一直处于“SendResponse”状态,直到超时

为了缩小问题的原因,我创建了一个控制台应用程序,可以从ASP.NET站点按顺序下载内容。该问题在WCF数据服务(OData)、标准WCF服务和直接向HttpResponse对象输出类似数据的Web表单页面上重复出现。所使用的示例代码以标准WCF服务为例(以便于尝试复制它的人进行设置)

控制台应用程序客户端:

    static void Main(string[] args)
    {
        Console.ReadKey(); // press any key to start test

        do
        {
            var req = WebRequest.Create(new Uri("http://localhost:26332/WCFTest.svc/GetData"));
            var response = req.GetResponse();

            using (var stream = response.GetResponseStream())
            {
                var content = new StreamReader(stream).ReadToEnd();           
            }           
        } while (true);
    }
WCF服务:

    public class Service1 : IService1
    {
        public TestClass[] GetData()
        {
            return Enumerable
                .Range(0, 15000)
                .Select(i => new TestClass{ ID = "1" })
                .ToArray();
        }
    }

    [DataContract]
    public class TestClass
    {
        [DataMember]
        public string ID { get; set; }
    }

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebGet(UriTemplate = "GetData")]
        TestClass[] GetData();
    }
对web服务进行多次调用(每次运行的调用不同,但通常少于30次)后,GetResponseStream调用将挂起

任何关于可能出现的问题或如何缩小问题原因的想法都将不胜感激

服务web.config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WcfService2.Service1" >
        <endpoint
          address=""
          binding="webHttpBinding"
          contract="WcfService2.IService1"
          behaviorConfiguration="webHttp"/>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>  
</configuration>

WCF数据服务代码:

public class Service1 : DataService<ODataContext>
{
    public static void InitializeService(DataServiceConfiguration configuration)
    {
        configuration.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
    }
}

public class ODataContext
{
    public IQueryable<TestClass> Test
    {
        get
        {
            return Enumerable
                .Range(0, 15000)
                .Select(i => new TestClass {ID = "1"})
                .AsQueryable();
        }
    }
}

public class TestClass
{
    public string ID { get; set; }
}
公共类服务1:DataService
{
公共静态void InitializeService(DataServiceConfiguration配置)
{
configuration.SetEntitySetAccessRule(“*”,EntitySetRights.AllRead);
}
}
公共类ODataContext
{
公共可液化试验
{
得到
{
返回可枚举
.范围(0,15000)
.Select(i=>newtestclass{ID=“1”})
.AsQueryable();
}
}
}
公共类TestClass
{
公共字符串ID{get;set;}
}

这是ESET anti-virus检查传入HTTP流量和丢弃某些数据包时出现的问题。卸载ESET解决了该问题


有关ESET问题的更多信息:

事实证明,这是ESET反病毒检查传入HTTP流量和丢弃某些数据包时出现的问题。卸载ESET解决了该问题


有关ESET问题的更多信息:

根据请求添加了WCF服务web.config。唯一添加到标准web.config的是webHttp行为;可能看起来与上面的很相似。另一方面,您尝试了什么版本的WCF数据服务?(根据您对问题的描述,我并不认为这会有什么不同。)@MarkStafford MSFT我在WCF Data Services Server的5.0.1版上试用了它。我已经更新了问题以包含代码。嗯。。。我做了一些琐碎的修改(名称空间等),并在控制台应用程序的循环中运行它——在一千多次迭代中没有挂起。我根本没有修改我的Web.config。这可能是环境问题吗?网络?主办我正在用Win8/VS2012/IISExpress在我的本地盒子上玩。@MarkStafford MSFT看起来应该归咎于公司的反病毒软件。感谢您花时间尝试复制此问题,并为浪费您的时间而抱歉!根据请求添加了WCF服务web.config。唯一添加到标准web.config的是webHttp行为;可能看起来与上面的很相似。另一方面,您尝试了什么版本的WCF数据服务?(根据您对问题的描述,我并不认为这会有什么不同。)@MarkStafford MSFT我在WCF Data Services Server的5.0.1版上试用了它。我已经更新了问题以包含代码。嗯。。。我做了一些琐碎的修改(名称空间等),并在控制台应用程序的循环中运行它——在一千多次迭代中没有挂起。我根本没有修改我的Web.config。这可能是环境问题吗?网络?主办我正在用Win8/VS2012/IISExpress在我的本地盒子上玩。@MarkStafford MSFT看起来应该归咎于公司的反病毒软件。感谢您花时间尝试复制此问题,并为浪费您的时间而抱歉!