在WCF服务中获取请求者信息

时间:2011-01-05 14:30:56

标签: c# wcf

我正在开发一项支持Android,BlackBerry,iOS和WP7平台上的移动应用程序的服务。这些应用程序将连接到我正在处理的各种基于REST的WCF服务。我想看看客户端应用程序传递给我的服务的信息。为此,我在WCF服务中编写了当前操作:

[OperationContract]
[WebGet(UriTemplate = "/GetRequesterInfo")]
public string GetRequesterInfo()
{
  OperationContext context = OperationContext.Current;

  string message = "Session ID: " + context.SessionId;
  return message;
}

当我调用此代码时,我注意到SessionId是一个空字符串。另外,我想尽可能多地获取有关客户端的信息。例如,如果这是ASP.NET,我可以使用HttpRequest对象并获取:

  • 列举HTTPMethod
  • IsLocal
  • IsSecureConnection
  • 的RequestType
  • Url.AbsoluteUri
  • Url.OriginalString
  • 的UserAgent
  • UserHostAddress
  • UserHostName
  • Browser.Id
  • Browser.Browser
  • Browser.CanInitiateVoiceCall
  • Browser.ClrVersion.Minor
  • Browser.Cookies
  • Browser.EcmaScriptVersion
  • Browser.GatewayVersion
  • Browser.InputType
  • Browser.MobileDeviceManufacturer
  • Browser.MobileDeviceModel

虽然有更多属性,但我相信你会明白这一点。这引出了几个问题:

  1. 如何将与请求关联的请求线程提供给我的WCF服务?我认为这就是OperationContext的用途。但我愿意接受纠正。
  2. 如何获取与WCF服务请求相关联的所有属性名称/值?
  3. 我要求一些有意义的东西,还是我的摇杆?看起来我应该能够获得有关请求客户端的一些信息。

1 个答案:

答案 0 :(得分:4)

您可以使用System.ServiceModel.Channels.MessageProperties

OperationContext context = OperationContext.Current;

if (context != null)
{
    MessageProperties messageProperties = context.IncomingMessageProperties;

如果请求实际来自浏览器,您可以获得HttpRequest对象,这就是您要求的对象。

这是我MessageProperties的屏幕截图,它应该为您提供有关如何访问这些属性的足够信息:

alt text