我已将WCF服务托管在WindowsServiceHost上(以传达WindowsFormsApp WindowsServiceHost)有什么办法可以将数据从WCFService获取到WindowsServiceHost?并以其他方式(将数据从WindowsServiceHost设置为WCFService)那就是我所做的:我已经完成了WCF服务库的项目,已实现的接口,合同等。我创建了新项目-Windows服务,并从#1和System.ServiceModel添加了对项目的引用配置的app.conf:<system.serviceModel><bindings> <netTcpBinding> <binding name="netTcp"> <security mode="Message"> </security> </binding> </netTcpBinding></bindings><behaviors> <serviceBehaviors> <behavior name="mexBehavior"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors></behaviors><services> <service behaviorConfiguration="mexBehavior" name="KSPDJOBWinWCFService.KSPDJOBWinWCFService" > <endpoint address="KSPDJOBWinWCFService" binding="netTcpBinding" contract="KSPDJOBWinWCFService.IKSPDJOBWinWCFService" bindingConfiguration="netTcp" /> <host> <baseAddresses> <add baseAddress="http://localhost:8079"/> <add baseAddress="net.tcp://localhost:8090"/> </baseAddresses> </host> </service></services>我已经将WCF托管在Windows Service的OnStart方法中protected override void OnStart(string[] args){ host = new ServiceHost(typeof(KSPDJOBWinWCFService.KSPDJOBWinWCFService)); host.Open();}使用WinformsClient应用程序(作为WCF客户端)添加了新的解决方案,并测试了通信-一切正常。问题是当我从WinFormsClient向WCF服务发送一个值并想从Windows Service应用程序读取它时谢谢你的帮助。 最佳答案 您可以将WCF服务实例保存在全局变量中并处理事件。在此示例中,WCF服务KSPDJOBWinWCFService公开了一个事件EventA,服务主机将对其进行处理。在这里可以处理WCF客户端发送的值。public partial class Service : ServiceBase{ private ServiceHost _host; private KSPDJOBWinWCFService _instance; protected override void OnStart(string[] args) { try { _instance = new KSPDJOBWinWCFService(); _instance.EventA += HandleEventA; _host = new ServiceHost(_instance); _host.Open(); } catch (Exception ex) { // Logging } } public void HandleEventA(object sender, CustomEventArgs e) { // do whatever you want here var localVar = e.Value; } protected override void OnStop() { try { if (_instance != null) { _instance.Dispose(); } _host.Close(); } catch (Exception ex) { // Logging } }}然后,WCF服务将触发此事件以及从WCF客户端发送的值:public class KSPDJOBWinWCFService : IKSPDJOBWinWCFService{ public event EventHandler<CustomEventArgs> EventA; public bool SomeWcfOperation(int value) { EventA?.Invoke(this, new CustomEventArgs(value)); return true; }}创建满足您需要的事件参数:public class CustomEventArgs : EventArgs{ public int Value { get; set; } public CustomEventArgs(int value) { Value = value; }}您还可以在WCF服务中使用公共属性公开值。但是事件也是必要的。关于c# - 我可以通过主机获取/设置数据到WCF服务吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40591726/
10-10 22:53