WCF::玩WCF 时出错:"基础连接已经关闭: 连接被意外关闭。"

使用:
玩WCF 时出错:"基础连接已经关闭: 连接被意外关闭。"    ----出这个错的原因估计很多,因为在网上收到不少答案.但我遇到的是这种...
先不说解决办法 ^_^
1.声明服务及操作契约:
    [ServiceContract(Name="BocomService",Namespace="http://www.bocom.cn%22)]/
    public interface IServiceSZ
    {
        [OperationContract]
        DataTable GetDataCarFluxCalc(DateTime BeginTime, DateTime EndTime, string CarNumber);

        [OperationContract]
        DataTable GetDataCarOperatingCalc(DateTime BeginTime, DateTime EndTime, string CarNumber, string RouteID);
    }

2.契约实现类:

public class BocomService : IServiceSZ
    {
        /// <summary>
        /// 连接字符串
        /// </summary>
        private string m_connstring = System.Configuration.ConfigurationManager.AppSettings["connstring"].ToString();

        #region IServiceSZ 成员
        public DataTable   GetDataCarFluxCalc(DateTime BeginTime, DateTime EndTime, string RouteID)
        {          
            ...
        }
        public DataTable   GetDataCarOperatingCalc(DateTime BeginTime, DateTime EndTime, string CarNumber, string RouteID)
        {
            ....
        }
        #endregion
    }

现象:

    1.WCF 可正常起动并在服务端IE浏览.
    2.客户端也可正常引用.

出现错误:

    1.BocomWCF.BocomServiceClient bs = new DEMOWCF.BocomWCF.BocomServiceClient();          
      this.dataGridView1.DataSource
                = bs.GetDataCarFluxCalc(DateTime.Parse("2009-10-01"), DateTime.Parse("2009-10-15") , "01S0D087");
     "基础连接已经关闭: 连接被意外关闭。"

     到网上查询解决办法,但都没有适应我的环境的,所以没解决我的问题:
调试一个使用HttpWebRequest模拟提交表单的程序的时候频繁出现上述错误提示,google了一下发现了几个解决方案。
1、在application.config或web.config文件里加入

<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true"/>
</settings>
</system.net>


2、设置clientConnectionLimit属性需要在客户端的 .config 文件当中:
如:

<system.runtime.remoting>
<application>
<channels>
<channel ref="http" clientConnectionLimit="50">
<clientProviders>
<formatter ref="soap" />
</clientProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>

这两种方法都没能解决我的问题,突然看到有人提到headers信息的问题,增加一句代码

3.MyRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
问题解决。


最终我的解决办法:

将返回结果由DataTable 改为 DataSet 问题就解决了.估计不支持DataTable 序列化,呵呵说了这么多就这句中听。
posted @ 2009-10-19 23:01  二楼后座  阅读(2128)  评论(0编辑  收藏  举报