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 序列化,呵呵说了这么多就这句中听。
玩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 序列化,呵呵说了这么多就这句中听。