2011-01-05 3 views
3

Я работаю над сервисом, который будет поддерживать мобильные приложения на платформах Android, BlackBerry, iOS и WP7. Эти приложения будут подключаться к различным службам WCF на основе 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. Я прошу что-то, что имеет смысл, или я с моего коромысла? Похоже, я должен получить некоторую информацию о запрашивающем клиенте.

ответ

4

Вы можете использовать System.ServiceModel.Channels.MessageProperties:

OperationContext context = OperationContext.Current; 

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

Если запрос на самом деле пришли из браузера, вы можете получить HttpRequest объект, который является то, что вы просили.

Вот снимок экрана моего MessageProperties, это должно дать вам достаточно информации о том, как получить доступ к этим свойствам:

alt text

+0

Я не в состоянии получить доступ к программному MessageProperties 'значения. messageProperties.Values ​​[2] 'вызывает эту ошибку: ' Невозможно применить индексирование с [] к выражению типа 'System.Collections.Generic.ICollection ' '. –

+0

@ADC, попробуйте получить доступ к его коллекции ключей. См. Выше на картинке, что перечислены не значения, это AllKeys. –

Смежные вопросы