use*_*626 88 .net wcf exception-handling wcf-configuration wcf-endpoint
我最近创建了一个WCF服务(dll)和一个服务主机(exe).我知道我的WCF服务正常工作,因为我能够成功地将服务添加到WcfTestClient.
但是,当我从服务主机(exe)使用我的WCF时,我似乎遇到了一个问题.我可以向我的服务主机(exe)添加对WCF(dll)的引用,并为exe创建必要的组件; 例如服务安装程序,服务主机和app.config,编译然后最后使用InstallUtil安装exe.但是,当我尝试在Microsoft管理控制台中启动该服务时,该服务在启动后立即停止.
所以我开始调查可能导致此问题的原因是从事件查看器中的应用程序日志中得出此错误.
描述:
服务无法启动.System.InvalidOperationException:服务"服务"具有零应用程序(非基础结构)端点.这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在service元素中没有定义端点.
这个错误实际上是在OnStart
; 当我执行此调用时,我的exe ServiceHost.Open()
.我看过很多其他人遇到过这个问题的帖子,但是大多数(如果不是全部的话)声称服务名称或合同; 命名空间和类名,未指定.我在配置文件中检查了这两个条目; 在exe和dll中,它们完美匹配.我已经让办公室里的其他人仔细检查我,以确保我不会在某一点上失明,但当然他们得出了与我相同的结论,即一切看起来都是正确的.对于此时发生的事情,我真的很迷茫.任何人都可以帮我解决这个问题吗?
另一件可能导致这种情况发生的原因是app.config永远不会被读取; 至少不是我认为应该阅读的那个.这可能是问题吗?如果是这样,我该如何解决这个问题.再次,任何帮助将不胜感激.
Ste*_*Cav 91
我刚刚遇到这个问题,并通过将名称空间添加到服务名称来解决它,例如
<service name="TechResponse">
Run Code Online (Sandbox Code Playgroud)
成为
<service name="SvcClient.TechResponse">
Run Code Online (Sandbox Code Playgroud)
我也看到它用Web.config而不是App.config解决了.
小智 11
端点还应具有命名空间:
<endpoint address="uri" binding="wsHttpBinding" contract="Namespace.Interface" />
Run Code Online (Sandbox Code Playgroud)
需要考虑的一件事是:您的WCF是否与WindowsService(WS)完全脱钩?WS很痛苦,因为你对它们没有很多控制或可见性.我尝试通过将所有非WS内容放在他们自己的类中来缓解这种情况,这样他们就可以独立于主机WS进行测试.使用此方法可以帮助您消除WS运行时与特定服务之间发生的任何事情.
John可能是正确的,它是.config文件问题.WCF将始终查找执行上下文.config.因此,如果您在不同的执行上下文中托管WCF(即,使用控制台应用程序进行测试,并使用WS进行部署),则需要确保将WCF配置数据移至正确的.config文件中.但对我来说,潜在的问题是你不知道问题是什么,因为WS goo阻碍了.如果你还没有重构,那么你可以在任何上下文(即单元测试或控制台)中运行你的服务,那么我建议你这样做.如果你在一个单元测试中旋转你的服务,它可能会失败的方式与你看到的WS一样容易调试,而不是尝试使用令人讨厌的WS管道.
当我以编程方式添加它时,我得到了一个更详细的异常 - AddServiceEndpoint
:
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(MyNamespace.IService),
new BasicHttpBinding(), baseAddress);
host.Open();
Run Code Online (Sandbox Code Playgroud)
为 WCF 准备配置很困难,有时服务类型定义会被忽视。
我在服务标签中只写了命名空间,所以我得到了同样的错误。
<service name="ServiceNameSpace">
Run Code Online (Sandbox Code Playgroud)
不要忘记,服务标签需要一个完全限定的服务类名。
<service name="ServiceNameSpace.ServiceClass">
Run Code Online (Sandbox Code Playgroud)
对于其他和我一样的人。
归档时间: |
|
查看次数: |
107004 次 |
最近记录: |