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。
感谢您的帮助!
如何为您服务托管?另外,你可能会考虑使用XLink 1.1规范。它当然不会禁止相关的href元素。 – 2012-01-09 09:37:13
禁止不是因为xlink对象,这是因为与webservice交互的应用程序。 该服务托管在IIS7中,因为身份验证不适用于自托管应用程序。 – cansik 2012-01-09 09:48:31
您可以尝试从请求的服务器变量中检索被调用的地址吗?我猜你的网络服务需要在asp.Net兼容模式才能访问。 http://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx – Rajesh 2012-01-09 10:05:20