public class MyServiceClientInitializer : IMyServiceClientInitializer
{
[ThreadStatic]
private static MyServ.MyService _client;
public MyServ.MyService Client
{
get
{
if (_client == null
|| (_client.State != CommunicationState.Opened
&& _client.State != CommunicationState.Opening))
IntializeClient();
return _client;
}
}
private void IntializeClient()
{
if (_client != null)
{
if (_client.State == CommunicationState.Faulted)
{
_client.Abort();
}
else
{
_client.Close();
}
}
_client = new MyServ.MyService();
_client.Open();
}
}
用户操作 调用 , 每次都会取到这个 状态为opend 的 _client ,上面初始化时少了一个 _client.Open(); 部分服务器上 偶尔会出现 ?
10057 : Socket is not connected.也就是说你通过已经关闭或未打开的连接发送数据。仔细检查你的代码,找到为什么你需要在未打开或已关闭的连接上发送数据的具体原因。
小学生来帮顶一下!
检查是否是多线程的原因,描述能否再详细一些点
连接关闭了,你还来使用,应该是客户端没有控制好连接、调用、释放的流程。
建议在每次调用前连接、再调用、然后释放的方法会稳定!
小伙伴 加油,
我遇到过这个问题,_client.State != CommunicationState.Opened && _client.State != CommunicationState.Opening
这个判断并不能保证_client一定可用,原因是_client.State 这个状态不是自动转换的,必须你做一次正常调用才会触发.