Получение информации о реквестере в службе WCF - PullRequest
3 голосов
/ 05 января 2011

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

4 голосов
/ 12 января 2011

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

OperationContext context = OperationContext.Current;

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

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

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

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...