WCF 请求 channel ;到底发生了什么?

标签 wcf service

当一个人调用IRequestChannelOpen 方法时到底发生了什么?例如,如果我有以下代码:

ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>();
// using a netTcpBinding to a net.tcp://localhost:9999/Bar
IRequestChannel outchannel = factory.CreateChannel();
outchannel.Open(); // what happens here?
if (outchannel.State == CommunicationState.Opened)
{
    success = true;
}
outchannel.Close();

我似乎在某些服务上得到了“误报”,而在其他服务上却出现了准确的失败。如果这不能以某种方式验证 channel 是否打开,我会假设我总是会得到误报。

有什么改进建议吗?我想避免发送消息,因为这只是为了测试服务的诊断测试可行性,但如果有必要,我可以。


我从我们的配置文件中注意到,返回误报的 channel 正在使用以下行为配置:

<binding name="secureNetTcpStream" maxBufferSize="2000000" maxReceivedMessageSize="2000000000" transferMode="Streamed" sendTimeout="00:05:00" receiveTimeout="14:00:00">
    <readerQuotas maxStringContentLength="2000000000" maxArrayLength="2000000000" />
    <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" />
    </security>
</binding>

我想知道流行为配置是否导致 IRequestChannel 在主机和服务不可用时显示它是打开的?

最佳答案

调用Open函数确实会联系服务器端并打开通信 channel 。

但是,可能会出现打开成功但调用服务的其中一个方法失败的情况。

例如:如果客户端调用启动 session 的服务方法并且服务器已达到其最大 session 数,则该函数将失败并出现服务器忙异常。因此,即使您有一个开放的 channel ,您也可能无法创建 session 。

即使 channel 打开成功,服务中也可能存在其他各种故障。

总结: 您的检查很好,但可能还有其他“障碍”会干扰客户端-服务器通信。这些可能是您的误报...

关于WCF 请求 channel ;到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/394051/

相关文章:

java - 如果正在运行,Android 服务会与 Activity 对话吗?

c# - 确保使用特定网络接口(interface)执行传出 WCF 请求

ios - iOS Swift 中的 Android 服务等价物

c# - 使用 ManagedInstallerClass.InstallHelper 安装多个服务

javascript - 无法从故障异常中获取信息(javascript)

networking - 如果使用本地流量策略,Kubernetes负载均衡器将停止服务流量

windows - 错误 1920 服务启动失败。确认您有足够的权限启动系统服务

wcf - 离线客户端和发送至 azure 的消息

WCF 4路由器服务配置问题

c# - 如何使我的 WCF 服务调用通过已配置的本地代理服务器?