我的服务器 - 客户端应用程序使用WCF的会话,并按如下所述进行注释:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple)]
它通过双工NetTcpBinding进行通信并使用Message security:
<netTcpBinding>
<binding name="WCFSecurityBinding" receiveTimeout="01:00:00" sendTimeout="00:00:10" closeTimeout="00:01:00"
maxBufferSize="6553600" maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
<reliableSession ordered="true" inactivityTimeout="01:00:00"/>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</netTcpBinding>
一切正常,但我想在某些情况下手动关闭会话。我很好,因为我无法从服务器端关闭会话。所以我试图从客户端强制关闭会话。 我非常简单的场景是(服务器为[S],客户端为[C]):
[S]启动主机应用
[C]连接到[S]并启动会话
所以三号对我来说很有趣。 我尝试调用proxy.Close()和proxy.Abort()以及DuplexChannelFactory.Close()。没有什么对我有用 - 处理程序(第4点)从未被调用过,当我能够从服务器获取数据时,会话仍然存在作为证明点5。我无法找到除关闭和中止之外的任何其他内容。我错过了什么吗?
实现我的行为的唯一两种方法是:
- 编辑 我尝试了各种方法:
try
{
_proxy.Close();
}
catch (FaultException)
{
_proxy.Abort();
}
catch (CommunicationException)
{
_proxy.Abort();
}
catch (TimeoutException)
{
_proxy.Abort();
}
或者
DuplexChannelFactory<...> dcf...
...
dcf.Close();
dcf.Abort();
Close();
Abort();
没有任何作品,也没有例外。