2012-01-09 18 views
0

我已經實現了一個REST Web服務,該服務返回(在通過RFC 2617 HTTP摘要驗證進行驗證之後)帶有xlink的XML文檔到相關資源。如何獲取WCF Rest請求的被叫地址?

這裏有一個請求的例子:

http://172.32.42.53:8080/Service.svc/user/123 

一個結果可能是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<UserList xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <User> 
    <ID>2</ID> 
    <UserName>CHI</UserName> 
    <OutlineLink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://demo:8080/Service.svc/Users/2/Outline/" cache="no"/> 
    <SettingsLink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://demo:8080/Service.svc/Users/2/Settings/" cache="no"/> 
    <CatalogsLink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://demo:8080/Service.svc/Users/2/Catalogs/" cache="no"/> 
    <LastName>Test</LastName> 
    </User> 
</UserList> 

所以,現在的問題是:

如果用戶要求通過web服務IP地址,第一次握手將通過IP地址而不是DNS名稱。因此,只有當第二次調用(指定資源)再次通過IP地址時,認證纔會起作用。我用以下命令試了一下:

OperationContext.Current.IncomingMessageProperties.Via.ToString(); 

但我的web服務總是返回服務器,而不是「被叫地址」的DNS。

是否有可能獲得被叫地址?所以我可以動態地返回被調用的地址(ip或dns)。獲得解決方案會很好。 xlink不允許使用相對URL。

感謝您的幫助!

+0

如何爲您服務託管?另外,你可能會考慮使用XLink 1.1規範。它當然不會禁止相關的href元素。 – 2012-01-09 09:37:13

+0

禁止不是因爲xlink對象,這是因爲與webservice交互的應用程序。 該服務託管在IIS7中,因爲身份驗證不適用於自託管應用程序。 – cansik 2012-01-09 09:48:31

+0

您可以嘗試從請求的服務器變量中檢索被調用的地址嗎?我猜你的網絡服務需要在asp.Net兼容模式才能訪問。 http://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx – Rajesh 2012-01-09 10:05:20

回答

1

您可以嘗試從請求的服務器變量中檢索被調用的地址嗎?我猜你的網絡服務需要在asp.Net兼容模式才能訪問。像「REMOTE_HOST」,「HTTP_HOST」,「SERVER_NAME」,等等

檢查這個link服務器變量列表