4

我正在尝试在 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“层” )。

系统管理员和我尝试了各种形式的 httpcfg 命令,但到目前为止没有运气。

我知道尝试在 IIS 中托管它可能是一种可能的解决方案,但我们的生产应用程序服务器没有安装 IIS,所以我只想将服务作为 ServiceHost 运行。

任何想法将不胜感激!

4

4 回答 4

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 运行相同类型的命令(请参阅下面的链接)。

可悲的是,这需要一段时间才能弄清楚,但这是一次很好的学习经历。

以下是一些我认为有助于解决此问题的链接:

于 2009-02-11T06:45:40.153 回答
1

NT服务配置了什么身份?要隔离问题,请尝试使用本地管理员帐户查看此问题是否与权限相关。

于 2009-02-09T22:22:21.983 回答
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 来测试一些自托管的服务,这些服务预计可以正常工作,首先在服务器内,然后从服务器外部。

于 2009-02-09T23:04:27.517 回答
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"

于 2012-08-28T08:48:00.643 回答