2009-02-09 64 views
3

我想在Windows 2007 SP1服務器上運行WCF ServiceHost作爲NT服務。 ServiceHost的是承擔一切託管單一服務端點:WCF ServiceHost basicHttpBinding 503錯誤

http://localhost:5555/ToBlah 

當我運行我的本地機器(Windows XP中)在此ServiceHost的,它工作正常 - 當我一個SOAP消息:與下列地址basicHttpBinding的它會返回一個HTTP 202代碼(「Accepted」),這對我的服務是正確的響應,因爲合同具有IsOneWay = true。但是,當我在我的2007服務器上運行此操作時,當我嘗試調用該服務時,出現503錯誤。我將WCF消息日誌記錄轉爲「一路向上」,但我沒有看到任何日誌記錄,這導致我認爲這發生在比WCF更低的級別(調用永遠不會到達WCF「圖層」 )。

的SYS-管理員,我曾嘗試過各種形式的命令httpcfg,但至今沒有運氣。

我知道努力舉辦這次在IIS中可能是一個可行的解決方案,但我們的生產應用服務器上沒有安裝IIS,所以我想只要運行服務作爲ServiceHost的。

任何想法將不勝感激!

回答

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結合使用來測試某些自託管的服務,並且這些服務需要在服務器內首先正確工作,然後從外部服務器。

+0

感謝您花時間幫助我。我一定會考慮你的建議。 – 2009-02-10 02:00:14

1

什麼身份被配置爲NT服務?要隔離問題,請嘗試使用本地管理員帳戶查看此問題是否與權限相關。

+0

感謝您的建議,我會在明天進行調查。 – 2009-02-10 01:59:39

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的命令(參見下面的鏈接)。

不幸的是,這花了一段時間才弄清楚,但這是一個很好的學習經驗。

這裏有一些鏈接,我認爲是有用搞清楚了這一點:

+0

嘿,這是有關自定義HTTP端口服務器限制的很好的信息。我在XP Pro上使用自定義HTTP端口有很好的經驗,所以這是一個有趣的區別。請稍後發佈您的Vista成功案例,如果我們的任何想法對您有幫助,請投票給我們。 – 2009-02-12 15:32:42

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

  • 內置網絡服務帳戶:

    netsh http add urlacl url=http://+:8001/ user="NT AUTHORITY\NETWORK SERVICE"