问题标签 [net.tcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
333 浏览

wcf - WCF 身份验证和套​​接字中止异常

这是该项目的设置。

我有一个 WCF 服务,它以缓冲模式托管在 net.tcp 绑定上,并启用了 ReliableSession。

绑定配置为使用 TransportWithMessageCredential 安全性。该证书是我使用指纹识别的自签名证书。UserNameValidator 是一个自定义验证器,用于测试,从不失败(之前没有失败,但我消除了不确定性)

服务和客户端在同一台机器上,他们都可以访问证书。

问题:

我在尝试使用服务中的方法时收到 Socket Aborted 异常。这是我用来打开与服务的连接的代码。MonitorServiceCallbacks 仅包含满足接口要求的空方法。

这似乎工作正常,因为 _serviceInterface.State 变量设置为 State.Opened 并且自定义验证器被调用并无异常返回。

但是,如果我尝试使用 _serviceInterface 代理调用方法,则不会在服务上运行任何我可以闯入的代码,并且跟踪日志显示除了 SocketAborted 异常之外没有错误,该异常发生在收到似乎是消息的 1 分钟后方法。

没有内部异常。

我试图用谷歌搜索这个问题,但结果往往是“只要禁用安全性,它就会正常工作”。不幸的是,这是无法做到的。

我对这个问题感到非常困惑,任何帮助将不胜感激。

非常感谢,
埃里斯

0 投票
2 回答
2698 浏览

c# - WCF (net.tcp) service: Works on all but one system

I've written created a WCF service inside a Windows service, and for some reason I can't figure out, I deployed the service on a bunch of systems (all nearly identical in OS and configuration), and it works on all but one server. The configuration for all deployments is identical except for the service's base address.

When the service is started, I get no exception when I open the ServiceHost, and when using netstat -anp I can see the socket has been opened by the service's process. I've set up Windows firewall logging for dropped packets, but the log file remains empty.

If I try accessing the WCF service from WCF Test Client, I get the following message:

I've tried WCF logging, but the log file does not even get created.

The config for the service is as follows:

I'm kinda lost, because there is NO indication whatsoever as to why it's not working. Any help would be appreciated.

0 投票
2 回答
8816 浏览

c# - 尝试从 WCF 服务支持双 LAN 时,WCF 内部异常消息“URI 'net.tcp://....' 的注册已经存在”

我有一个自托管的 WCF 服务,它使用 net.tcp 协议作为端点,它在带有普通 LAN 卡的 PC 上运行良好。

但是,我想支持具有双 LAN 卡的 PC,这给我带来了问题。我为两张卡(192.168.1.1 和 193.168.1.1)分配了不同的 IP 地址。然后我更改了我的 app.config 文件以尝试通过使用第二个 IP 地址为 WCF 服务添加第二个端点来支持双 LAN。(我的 WCF 客户端可以处理选择要使用的两个端点地址中的哪一个。)

当我运行该服务时,我收到以下错误消息:

'net.tcp://193.168.1.1:59301/MyClientService' 的 ChannelDispatcher 与合同“'IMyClientService'”无法打开其 IChannelListener。

来自内部异常的附加信息:URI 'net.tcp://193.168.1.1:59301/MyClientService' 的注册已经存在。

注意:如果我在 app.config 文件中更改第二个端点上的端口号(例如,如果我使用 193.168.1.1:59302),则服务可以正常启动。这是一种解决方法,但如果可能的话,能够为两个 LAN 使用相同的端口会很有用。

哦,我在绑定上尝试了 portSharingEnabled(运行 Net.TCP 端口共享服务),但这并没有帮助。

提前致谢...

我的 app.config 文件如下所示:

0 投票
3 回答
2838 浏览

wcf - WCF net.tcp 仅提供 TargetInvocationException/ServiceModel.CommunicationException 的服务

我正在编写一个 WCF (net.tcp) 文件传输服务,该服务最终会将文件拆分为几部分,并将所述部分从服务器/服务传输到客户端。目前客户端和服务器是控制台应用程序。

在编写此服务时,我曾多次遇到以下异常;

System.ServiceModel.CommunicationException:套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或者是潜在的网络资源问题造成的。本地套接字超时为“01:59:59.4220000”。

实际上,它以 Unhandled Exception 开始: System.Reflection.TargetInvocationException: 操作过程中发生异常,导致结果无效。检查 InnerException 以获取异常详细信息。---> 那么上面的 CommunicationException 文本就在这里。

以典型的 Microsoft 方式,该异常消息毫无帮助,因此我最终向社区呼吁,看看我是否可以解决这个问题。

此外,如果这很重要,客户端将异步调用服务的两个方法( InitGetFilePart() 和 GetFilePart() )。根据我的日志,对 InitGetFilePartAsync(1, 1) 的第一次调用会一直处理到最后;意味着它的“已完成”处理程序被调用,该处理程序又调用 vcClient.GetFilePartAsync(FileXferCargo, 1),然后它的处理程序产生一个 BackgroundWorker 线程 (workers[chunkNum].RunWorkerAsync(cargoHolder[chunkNum] where chunkNum=1) 它本身完成。这是正确的关于我得到上面提到的 TargetInvocationException 的时间。

过去我对 App.config 进行了各种调整(遗憾的是,我不记得究竟是什么)以使这个异常消失,但现在我所做的一切似乎都没有任何区别,我只是不明白为什么这会一直存在正在发生。

我已经阅读了有关此问题的其他建议,包括“您必须在客户端捕获异常,中止当前代理并创建并打开新代理”。好吧,我试过了,但似乎我无法捕捉到这个异常。

我还读到这可能是由于通过网络发送了太多数据,但是当我尝试发送我的小 4k 测试文件时,我得到了同样的异常。在我的调查过程中,我还读到我可以调用 1 个 WCF 服务函数/方法,多次使用带有 UserState 参数的 *Async() 调用,我正在这样做。

当谈到 WCF 时,我承认自己是一个相对的 n00b,但我很确定我的配置文件设置正确,适合我正在尝试做的事情。

这里是客户端和服务器 app.config 文件、服务接口定义和服务实现类的顶部。

客户端的 App.config:

服务器的 App.config:

Service接口定义如下;

Service实现类定义如下;

0 投票
1 回答
635 浏览

wcf - 使用 tcp 绑定和多个端口在单个站点中的 IIS 中托管 WCF 服务

我使用 net.tcp 绑定在 IIS 中托管的 WCF 服务存在性能问题。

我们最近将系统从 COM+ 移植到 WCF,测试表明性能下降。我一直在查看服务器上的性能计数器,CPU 利用率非常低(< 10%),可用内存充足,磁盘读取正常等...我还检查了 WCF 性能计数器和未完成的数量调用次数很少(在任何给定时间最多 1 次),每秒调用次数非常低(系统使用最多的服务每秒调用 16 次)。我们所有的服务都配置为每次调用和单线程......

我已经玩过节流并将所有设置的所有值设置为 100(服务器是 8 核机器,我的理解是实际的节流值最终是您设置的值乘以 CPU 数量)。我不认为那里有问题。

我还确保客户端有效地使用它的连接(而不是在存在可以使用的现有 tcp 连接的情况下创建新连接)

当前的 Web 应用程序托管大约 50 个服务(是的,就是 50 个!),目前我正试图消除这个问题的根源。我正在考虑在多个 Web 应用程序中托管服务,我也想让它们使用不同的端口,但我遇到了一些问题,我无法在任何地方的互联网上找到分步说明,所以我希望这里有人可以帮助我:)

到目前为止,这是我尝试做的事情:
1)我在 IIS 中向默认网站添加了另一个绑定(也就是说,我有两个 net.tcp 绑定,一个设置为使用“808:*”绑定信息和另一个使用“809:*”) 2)我确保这些端口被允许通过防火墙
3)然后我尝试配置每个单独的 Web 应用程序以过滤端口(这是来自 web.xml 的片段)配置我想使用端口 808):

<
serviceHostingEnvironment> <baseAddressPrefixFilters>
<add prefix="net.tcp//<servername>:808"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>

当我尝试连接到该服务时,我得到一个端点地址“net.tcp://<servername>/SomeService.svc”的服务对于地址的协议不可用

如果我删除 <serviceHostingEnvironmentgt; 少量。我在这里做错了什么?

其他服务,例如我想在端口 809 上可用的服务根本不可用,我收到的错误消息告诉我端点不存在,看起来 IIS 根本没有在那个端口上监听。如前所述,防火墙绝对允许此端口通过。

非常感谢任何关于托管这么多服务时最佳设置的想法或建议!

谢谢!

0 投票
1 回答
16367 浏览

wcf - 如何强制 net.tcp mex 端点 (mexTcpBinding) 参与端口共享?

我有一个作为 Windows 服务托管的 WCF 服务。我们希望在同一地址启用一个 mex 端点(但带有“/mex”后缀)。我一直在尝试使用以下配置执行此操作(未成功):

当它运行时,服务主机会抛出一个AddressAlreadyInUseException抱怨“IP 端点 0.0.0.0:808 上已经有一个侦听器”。这对我来说实际上是有意义的,因为端口共享服务已经打开了该端口,以便为MyService端点以及任何其他请求在这台机器上共享该端口的服务提供服务。

所以看起来 mex 端点想要独占访问端口 808。我可以通过像这样调整 mex 端点来解决这个问题:

这意味着 mex 端点现在拥有自己的专有端口。这样做的缺点是任何其他想要公开 mex 端点的服务也需要一个唯一的端口用于它的 mex 端点。这使得在寻找 mex 端点时变得非常不可预测。

有没有办法强制 mex 端点参与端口共享?

0 投票
1 回答
588 浏览

wcf - 如何使用 net.tcp 进行双工检查 Silverlight 客户端的连接是否仍然有效?

我正在使用 net.tcp 和 netTcpBinding 将 WCF 服务放在一起,以便与我的 Silverlight 客户端进行双工通信。我从 Silverlight 应用程序调用该服务,该服务调用另一个服务器,将 WCF 服务类中的回调方法传递给它。远程服务器多次回调,每次回调时,WCF 服务都会使用回调通道将数据发送到 Silverlight 客户端。大多数时候这一切都很好。

如果用户提出一个大请求,我会在大量回调已经工作后得到一个 TimeoutException。(显然,在其他地方还有一些工作可以防止这种情况发生,但我想首先加强服务。)

在尝试回调 Silverlight 客户端之前,我希望进行某种“if (client.ConnectionState == faulted)”检查,但我似乎找不到保持连接状态的对象。有吗?我是不是从错误的角度来处理这个问题?

这是我第一次尝试服务 net.tcp 和双工。我刚搬家,我的 WCF 圣经还在一个盒子里。某处。:-) 所以,我不能做我通常的背景阅读。

任何指点将不胜感激。这是一些裸代码,以防我的描述太糊涂:

0 投票
2 回答
8678 浏览

wcf - 如果服务器断开我的连接,如何检测客户端?

我有一个带有 net.tcp DuplexChannel 的 WCF 自托管服务。在服务器上,我运行以下命令来断开客户端:

这工作正常,但我如何在客户端上检测到它已断开连接?

我已经在回调的 InstanceContext 和服务器的通道上连接了 Closed 和 Faulted-events:

但没有任何效果。我从来没有收到通知。我现在使用的解决方法是在回调中有一个方法来触发与客户端的断开连接。但我宁愿不这样做。我特别不想让服务器等待用户断开连接。

编辑

我刚刚意识到,从客户端断开连接时,我在服务合同中运行了一个标有 IsTerminating = true 的方法:

我想在回调合同上会是一样的吗?我尝试将相同的方法添加到我的回调中,它确实从服务器的角度终止了回调通道,但我仍然没有在客户端收到通知......奇怪

编辑

我发现了一些关于此的更多信息:

当服务器中止回调通道时,故障会返回到客户端,客户端发生故障,我们会在客户端上收到 Faulted 事件。

当服务器关闭回调通道时,会话仍然打开,直到客户端发出关闭。

客户端关闭频道后,您将看到 Closed 事件。

根据这个声明,关闭事件不会通过关闭服务器的回调通道来触发,客户端也必须关闭它。所以我可以在回调的终止 Disconnect 方法中在客户端上运行 Close。或者我可以在回调服务器端使用 Abort 方法,而在回调中跳过使用 Disconnect 方法。老实说,我不知道我更喜欢哪一个。嗯。

编辑

我选择了中止方法。这似乎是最合乎逻辑的方法,而且效果非常好。客户端收到回调实例上下文中的故障事件通知。好的。

0 投票
1 回答
3931 浏览

.net - NetTcpBinding 和 Windows 7 防火墙

我有一个使用 nettcpbinding 的 wcf winforms 自托管应用程序。(net.tcp://aaa.homeip.net:9388)问题是 Windows 7 防火墙,我在入站和出站列表(端口 9388)上添加了异常但仍然不起作用(即使客户端在同一台机器上)......我也尝试像这个提示一样在程序列表中添加分布式事务协调器,但没有成功......禁用防火墙时一切正常。

0 投票
2 回答
3318 浏览

wcf - WCF net.tcp 绑定分布式事务中的超时问题

通过 WCF net.tcp 绑定运行分布式事务时,我遇到了一个奇怪的超时问题。事务总是在恰好 10 分钟后超时。我想我已经将我知道的所有超时设置为比那个(15 分钟)更高的值,但我可能忽略了一些东西。我正在调用 IIS7.5 中托管的 WCF net.tcp 服务。

在服务端,我有以下绑定配置:

如您所见,所有相关超时均为 15 分钟。在客户端,绑定配置如下:

同样,我知道的所有超时都设置为 15 分钟。最后,启动事务的代码:

Web 服务方法本身具有以下签名:

但是,正如我所说,在开始交易后正好 10 分钟,它就超时了。我不确定是事务本身超时。可能是另一个组件超时导致事务超时。

我错过了什么?是否有我不知道的 IIS 设置?MSDTC 设置?