2012-01-09 53 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服务器变量列表