问题标签 [servicehost]

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 回答
1952 浏览

c# - ServiceHost 消息接收事件?

在 ServiceHost 或 Channel 或 Dispatcher 处理消息之前,肯定必须附加一个事件吗?我假设它可以通过 OperationContext.Current 访问,但我能找到的最接近的事件是打开和关闭。是否有类似 MessageReceived 或 BeforeMessageProcessed 事件?

如果不使用事件,是否有其他方法使用 WCF 类/配置来确定 ServiceHost SingletonInstance 当前是否正在处理 DataContract?

编辑:IDispatchMessageInspector(AfterReceiveRequest 和 BeforeSendReply)是完美的。我有大约 8 项服务,需要知道他们当前正在处理哪些消息(DataContracts)。虽然可以使用类似于辅助方法的方法,它接受委托并执行 BeforeReceive(); 调用委托();接收后();使用 IDispatchMessageInspector 和行为要容易得多。

0 投票
2 回答
2086 浏览

.net - 单元测试时ServiceHost的地址冲突

我正在编写一个小型 WCF 托管引擎,它将根据 .config 文件动态创建 ServiceHost。总体思路是允许我们在运行时删除现有服务以及添加新服务,而无需使所有服务脱机。

我遇到了一个问题单元测试,表明这可能不像听起来那么容易。对于任何给定的端点,似乎只有一个 ServiceHost 存在(即使一个服务的多个不同端点可能存在于单个 ServiceHost 中)。这通常不是问题,但是当需要重新配置服务时,关闭原始 ServiceHost 实际上并不会终止该端点地址的注册。尝试为同一服务(这意味着使用相同的端点)创建另一个 ServiceHost 失败,并出现以下异常:

我实际上在单元测试期间遇到了错误。测试将运行一个单元,该单元尽可能地完全关闭 ServiceHosts 和托管引擎。然后创建托管引擎的另一个实例,该实例尝试再次重新创建相同的 ServiceHosts 以进行不同的测试。第二次测试遇到上面的错误。我猜在调用 ServiceHost.Close() 时,它实际上并没有破坏服务主机......所以它仍然在内存中徘徊。我无法判断 GC 是否正在清理旧的服务主机……问题在最初发生后仍然存在并没有消失(据我所知,我已经能够确定……到目前为止,我已经等了大约 30 分钟。 )

我的 system.serviceModel 配置文件如下:

0 投票
1 回答
190 浏览

wcf - 在 WCF 托管服务中加入线程

当托管在 servicehost 对象中时,任何人都可以推荐一种关闭 WCF 服务及其线程的“干净”方式吗?

调用 servicehost.Close(); 当服务产生其他线程时不起作用:/

干杯,

0 投票
1 回答
1856 浏览

wcf - WCF 服务的 Win32Exception @ ServiceHost.Open()

我正在为我正在编写的一组广泛的 WCF 服务基础架构编写 BDD 规范。我注意到我编写的每个规范都涉及对 ServiceHost.Open() 的调用,该行需要 2 到 6 秒才能执行(随着我添加越来越多的规范,时间会不断增长)。我注意到,当调用此方法时,会抛出 Win32Exception:

ServiceModel 配置如下:

注意:我已配置 Http.sys 并将http://+:80/calculator/添加为 http 命名空间排除项,因此这不是问题的一部分。

此错误在 Windows 7 Ultimate 系统上最为严重。在 Vista Ultimate 系统上,它似乎不会对性能造成太大影响,但是 ServiceHost.Open() 是执行所花费的大部分时间。我不明白为什么当 URL 是 localhost 时它根本是个问题......我希望环回接口是最快的。

0 投票
3 回答
1883 浏览

wcf - 在某些 PC 上创建 WCF ServiceHost 对象需要三到四分钟

我创建了一个 WCF 服务,它不使用 app.config 来配置自身。但是,在某些 PC 上构建 ServiceHost 对象需要三到四分钟。认为我的服务有问题,我构建了一个简单的 Hello, World 服务并尝试了它。我有同样的问题。

根据分析器的说法,所有这些时间都花在了读取服务的配置上。

所以我真的有两个问题。

  1. 是否可以禁用从 XML 读取配置?

  2. 更重要的是,有谁知道为什么这可能会花费如此多的时间?

这是示例服务:

出于设计原因,我需要创建服务并将其作为对象传递,而不是作为类型传递。

如果有更多信息可以使用,请告诉我。

非常感谢。

0 投票
2 回答
1621 浏览

.net - WCF - 如果在客户端连接时关闭,则在 CloseTimeout 持续时间内关闭双工 ServiceHost 块

我有一个托管三个不同双工 WCF 通道的 Windows 服务。客户端可以连接以通过他们的回调合约将更新发送给他们。本质上存在三个 pub-sub 频道。

当客户端连接时,此服务需要很长时间才能反弹。调用ServiceHost.Close需要 10 秒才能返回(因此服务需要 30 多秒才能停止。)结果我closeTimeout的 in config 是 10 秒。更改此值表明这是问题的原因。

我该怎么做才能及时关闭频道?我不喜欢某些事情正在超时的想法。我可以打电话Abort,但似乎必须有更好的方法。我以前没有在非双工频道上看到过这种情况,所以假设这与它是双工的有关。

理想情况下,将立即通知客户端通道出现故障,以便用户可以立即看到更新已停止。

0 投票
1 回答
460 浏览

wcf - 可以从数据库加载 AppDomainSetup.ConfigurationFile 吗?

我正在通过使用ServiceHost和动态创建多个应用程序域来保持我的服务正常运行,从而在 WCF 主机上工作。我还计划将我的程序集保存在数据库中并使用Assembly.Load(byte[])

但是现在我偶然发现了一个问题:如何从数据库中加载我的配置文件(又名*.dll.config)并将其传递给我的新域?我的原型使用AppDomainSetup.ConfigurationFile并从文件系统加载它,但它不会实际存在于磁盘上。

有什么方法可以从byte[]?

0 投票
1 回答
2524 浏览

wcf - 多个服务主机有什么好处?一个 ServiceHost 是否支持一个端点上的多个同时连接?

我正在考虑自行托管我的 WCF 服务,而不是使用 IIS。对我来说,一个大问题是我是否需要像 IIS 那样实例化多个服务主机,或者一个就足够了。

除了隔离的安全原因之外,多个服务主机是否有任何好处?

一个服务主机可以同时在一个端点上服务多个连接吗?

0 投票
1 回答
361 浏览

wcf - IIS 中的 Castle WCF DefaultServiceHostFactory:访问 ServiceHost

我正在尝试从自托管架构迁移到 IIS 6 下的托管,主要是为了利用内置的动态压缩。

我正在使用 Castle DefaultServiceHostFactory 在 .svc 文件中向 IIS 提供服务。但是,我需要以编程方式指定某些端点和行为,并且我不知道如何检索当前的 ServiceHost。

这是可能的,还是我应该只看独立于 IIS 的其他压缩方法?

0 投票
2 回答
1087 浏览

wcf - WCF 服务工作线程与 ServiceHost 线程通信

我有一个打开 ServiceHost 对象的 Windows NT 服务。服务主机上下文是每个会话的,因此为每个客户端创建一个新的工作线程。我想做的是让每个工作线程调用启动服务主机的线程。NT 服务需要打开 VPN 连接并从远程网络上的设备轮询信息。信息存储在 SQL 数据库中,供工作线程读取。如果有客户端连接,我只想轮询设备,这将减少网络流量。我希望工作线程告诉服务主机线程他们正在请求信息并开始轮询和更新数据库。如果始终轮询设备并更新数据库,则一切正常。