wcf "Существующее соединение было принудительно закрыто удаленным хостом" после закрытия клиента
Я получаю сообщение об ошибке "Существующее соединение было принудительно закрыто удаленным узлом" после закрытия клиентской программы. Я добавил этот код, чтобы закрыть клиентское соединение, когда программа закроется.
У меня также есть кнопка, чтобы закрыть клиент, и кнопка работает без ошибок.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
client.Close();
}
catch (CommunicationException ex)
{
client.Abort();
}
catch (TimeoutException ex)
{
client.Abort();
}
catch (Exception ex)
{
client.Abort();
throw ex;
}
}
Я что-то здесь скучаю? Это трассировка стека:
< StackTrace>
bei System.ServiceModel.Channels.SocketConnection.HandleReceiveAsyncCompleted()
bei System.ServiceModel.Channels.SocketConnection.OnReceiveAsync(Object sender, SocketAsyncEventArgs eventArgs)
bei System.ServiceModel.Channels.SocketConnection.OnReceiveAsyncCompleted(Object sender, SocketAsyncEventArgs e)
bei System.Net.Sockets.SocketAsyncEventArgs.OnCompleted(SocketAsyncEventArgs e)
bei System.Net.Sockets.SocketAsyncEventArgs.FinishOperationAsyncFailure(SocketError socketError, Int32 bytesTransferred, SocketFlags flags)
bei System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
bei System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
< /StackTrace>
Я надеюсь, что stacktrace поможет кому-нибудь помочь мне: D Я использую nettcp, и ошибка возникает только тогда, когда я закрываю программу.
Спасибо Мануэль
ОБНОВЛЕНИЕ: wcf config: Сервер:
<serviceBehaviors>
<behavior name="MyBehaviour">
<serviceMetadata/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<services>
<service name="Service" behaviorConfiguration="MyBehaviour">
<host>
</host>
<endpoint address="" binding="netTcpBinding" bindingConfiguration="TCP" contract="IService"/>
<endpoint address="mextcp" binding="mexTcpBinding" contract="IMetadataExchange"/>
</service>
</services>
<netTcpBinding>
<binding name="TCP" portSharingEnabled="true" receiveTimeout="01:30:00" sendTimeout="01:10:00"
openTimeout="00:10:00" closeTimeout="00:10:00">
<security mode="None"/>
</binding>
</netTcpBinding>
Клиент:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IService" receiveTimeout="01:30:00" sendTimeout="01:00:00" openTimeout="00:10:00" closeTimeout="00:10:00">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://host/Service.svc"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IService"
contract="ServiceRef.IService" name="NetTcpBinding_IService" />
</client>
</system.serviceModel>
</configuration>
2 ответа
Есть ряд причин для этой ошибки. если сериализованный объект не сформирован правильно, эта ошибка будет выброшена из wcf. рассмотрим пример: в моем требовании я должен отправить основные данные (скажем, например: пользователь, продукт, страна) клиенту через объект класса ответа. В этом я добавил универсальный класс Object, который я использовал, а не объект основного класса, такой как product,country. В то время я получил ту же ошибку.
Открытое свойство genericObj As Object
Public Sub New()
MyBase.New()
Me.genericObj = New Object
End Sub
приведенный выше код вызвал ту же ошибку, что и вы.
затем я изменился на как показано ниже:
<DataMember()>
Public Property loginObject As csCSLogin
Public Sub New()
MyBase.New()
Me.loginObject = New csCSLogin
End Sub
Существует несколько возможных причин этой ошибки, но наиболее обычной причиной является отправка данных, когда узел уже закрыл соединение: другими словами, ошибка протокола приложения. Также возможно, что одноранговый узел плохо себя вел, умышленно сбрасывая соединение вместо того, чтобы нормально его закрывать. В любом случае вы мало что можете сделать во время выполнения, кроме как закрыть сокет и забыть о партнере. Но вы должны выяснить причины до времени компиляции.