我正在尝试在Windows 2007 SP1服务器上将WCF ServiceHost作为NT服务运行。 ServiceHost负责托管单个服务端点:具有以下地址的basicHttpBinding:
http://localhost:5555/ToBlah
当我在本地计算机(Windows XP)上运行此ServiceHost时,它运行正常 - 当我向其发送SOAP消息时,我得到一个HTTP 202代码(“已接受”),这是对我的正确响应服务,因为合同的IsOneWay = true。但是,当我在我的2007服务器上运行它时,当我尝试调用该服务时,我得到503错误。我将WCF消息日志记录“一直向上”,但我没有看到任何日志记录,这使我相信这发生在比WCF更低的级别(调用永远不会到达WCF“层”) )。
sys-admins和我尝试了各种形式的httpcfg命令,但到目前为止还没有运气。
我知道尝试在IIS中托管这个可能是一个可能的解决方案,但我们的生产应用服务器没有安装IIS,所以我想将服务作为ServiceHost运行。
任何想法都将不胜感激!
答案 0 :(得分:2)
好吧,我仍然无法让它在Vista服务器上运行 - 它仍然会出现503错误,但我最终在Windows 2003服务器上进行了设置,现在它似乎正在运行。
我在这个过程中学到的一件事是使用HttpCfg.exe来允许用户打开非标准的HTTP端口。
基本上我必须运行类似以下命令的内容:
httpcfg.exe set urlacl /u http://+:5555/ /a "O:AOG:DAD:(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)"
然后,您可以使用以下命令查看URL ACL设置:
httpcfg.exe query urlacl
在Vista上,您可以使用netsh运行相同类型的命令(请参阅下面的链接)。
可悲的是,这需要一段时间才能弄明白,但这是一次很好的学习经历。
以下是一些我认为有用的链接:
答案 1 :(得分:1)
为NT服务配置了哪些身份?要隔离问题,请尝试使用local-admin帐户查看此问题是否与权限相关。
答案 2 :(得分:1)
在我看来,服务器上的防火墙或其他配置设置都阻止了端口。
如果没有,那么您的服务可能在创建ServiceHost对象实例期间或在创建服务端点期间遇到错误,并且错误由于某种原因未被捕获(?)。您可以在服务代码中编写一些简单的内部测试循环,以验证是否正确创建了服务端点。这可能会揭示一些有趣的东西。
此外,从该服务器运行客户端并连接到在开发计算机上运行的服务可能会告诉您更多信息?您可以使用WCFTestClient.exe,如下所述:Is it possible to make the WcfTestClient work for custom transport channels?。这可能会为您提供更多信息。但是,您需要在服务中支持MetadataExchange(Mex)才能使用该测试客户端。
或者,您可以使用Visual Studio 2008 Samples文件夹中的WCF示例,结合WCFTestClient.exe来测试一些自托管的服务,并且可以正常工作,首先在服务器内,然后从外部运行。服务器。
答案 3 :(得分:1)
如果您使用的是Windows Vista或Windows 7,则必须使用“netsh”,这也更容易使用。
本地用户帐户:
netsh http add urlacl url=http://+:8001/ user=ComputerName\Username
域用户帐户:
netsh http add urlacl url=http://+:8001/ user=DomainName\Username
内置NetworkService帐户:
netsh http add urlacl url=http://+:8001/ user="NT AUTHORITY\NETWORK SERVICE"