我最近创build了一个WCF服务(dll)和一个服务主机(exe)。 我知道我的WCF服务工作正常,因为我能够成功地将服务添加到WcfTestClient。 但是,我似乎遇到了一个问题,当我从服务主机(EXE)使用我的WCF。 我可以添加一个对WCF(DLL)的引用到我的服务主机(EXE),并创buildexe的必要组件; 如服务安装程序,服务主机和app.config,编译,然后最终使用InstallUtil安装该exe文件。 但是,当我尝试在Microsoftpipe理控制台中启动服务时,服务在启动后立即停止。 所以我开始调查究竟是什么原因导致这个问题出现在应用程序日志中的事件查看器中的错误。 描述: 服务无法启动。 System.InvalidOperationException:服务“服务”没有应用程序(非基础设施)端点。 这可能是因为没有为您的应用程序findconfiguration文件,或者是因为在configuration文件中找不到匹配服务名称的服务元素,或者是因为服务元素中没有定义端点。 这个错误实际上是在OnStart产生的; 我的exe,当我执行此调用ServiceHost.Open() 。 我看过很多其他人遇到这个问题的post,但是大多数(如果不是全部的话)声称服务名称或合同; 命名空间和类名,没有被指定。 我在我的configuration文件中检查了这两个条目; 在EXE以及在DLL中,他们匹配完美。 我有办公室里的其他人仔细检查,确保我一点都不盲目,但当然他们得出和我一样的结论,一切看起来都是正确的。 在这一点上我真的很迷茫。 有谁能帮我解决这个问题吗? 另一件可能的原因是app.config永远不会被读取; 至less不是我认为应该阅读的那个。 这可能是问题吗? 如果是这样,我该怎么去解决这个问题。 再次,任何帮助将不胜感激。
我的客户端/服务器应用程序正在使用WCF进行通信,这非常棒。 但是目前架构的一个缺点是我必须对某些传输types使用已知types的configuration。 我正在使用内部的Pub / Sub机制,这个要求是不可避免的。 问题是,忘记添加已知types很容易,如果你这样做的话,WCF会自动地失败,并且会发生什么错误的线索。 在我的应用程序中,我知道将要发送的一组types。 我想以编程方式执行configuration,而不是通过当前包含如下内容的App.config文件声明性地执行: <system.runtime.serialization> <dataContractSerializer> <declaredTypes> <add type="MyProject.MyParent, MyProjectAssembly"> <knownType type="MyProject.MyChild1, MyProjectAssembly"/> <knownType type="MyProject.MyChild2, MyProjectAssembly"/> <knownType type="MyProject.MyChild3, MyProjectAssembly"/> <knownType type="MyProject.MyChild4, MyProjectAssembly"/> <knownType type="MyProject.MyChild5, MyProjectAssembly"/> </add> </declaredTypes> </dataContractSerializer> </system.runtime.serialization> 相反,我想要做这样的事情: foreach (Type type in _transmittedTypes) { // How would I write this method? AddKnownType(typeof(MyParent), type); } 有人可以解释我怎么可以做到这一点? 编辑请理解,我试图在运行时dynamic设置已知types,而不是在configuration中使用声明或在源代码中使用属性。 这基本上是关于WCF API的一个问题,而不是一个样式问题。 编辑2 […]