我已經定義爲WCF服務如下:不同的URL 7
<service name="MyService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/ServiceContainer" />
</baseAddresses>
</host>
<endpoint address="Service" binding="webHttpBinding" contract="IService" />
</service>
我的服務實現以下合約:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "DoWork")]
void MyMethod();
}
我託管WCF服務爲Windows服務,使用WebServiceHost
。
主機上XP我呼籲URI操作:
http://myhost:8080/ServiceContainer/DoWork
(即基址/ URI模板)
主機上的Windows 7,同一個URI失敗(出現404
錯誤)。但是,下面的URI成功:
http://myhost:8080/ServiceContainer/Service/DoWork
(即基址/ 端點地址/URI模板)
第二URI也適用於XP。調用服務的客戶端的操作系統沒有區別。
這兩種操作系統之間的行爲差異的原因是什麼?也許在Windows 7下更受限制的是UriTemplate
?這是所有這些記錄的地方?
編輯:我也有Windows防火牆和防病毒掃描程序運行(我不能禁用)。但是,我沒有在他們的日誌中看到任何東西(例如pfirewall.log
)以表明某些內容被阻止。
編輯2:添加以下URI保留允許服務要在Windows 7上使用,但並沒有影響上述行爲:
netsh http add http://+:8080/ user=\Everyone
在你的netsh行你輸入 「+:8000」,而不是 「+:8080」。 – Philm 2014-09-29 15:25:25
XP和Win7的主要區別應該是「netsh http」所需的端口註冊。你確定,你在兩個版本中都使用相同的.NET版本嗎?也許WCF的改變。事實上,在您指定端點後,「服務/ DoWork」聽起來更加正確。但不幸的是,我不是這裏的專家。 – Philm 2014-09-29 15:30:41
@Philm謝謝,我糾正了端口號。我將檢查.NET版本。我同意,Win7行爲似乎是正確的,並且更安全。也許是版本之間的錯誤修復? – 2014-09-30 07:30:25