2015-10-18 5 views
1

У меня есть несколько служб REST WCF, которые принимают запросы объекта JSON и возвращают ответы объекта JSON.Получить запрос RAW String для службы REST WCF

Public Function SaveClientInformation(info as ClientInformation) As Boolean Implements IContactInformation.SaveClientInformation 
    'Here info object is the de-serialized JSON that was sent 

    'At this point we also need access to the RAW JSON string that was sent from the Java client 
    dim rawJSONRequest = ? 

    'We take the info object and persist it out postgress database 

End Function 

Мне нужно захватить необработанную строку JSON из метода веб-службы. В настоящее время у меня есть доступ к десериализованному объекту, но мне также нужна строка RAW JSON, которая была отправлена ​​в веб-службу.

Я просмотрел документацию WCF и осмотрелся, к сожалению, это не представляется возможным. WCF не позволяет мне получить запрос RAW (строка), который был отправлен на сервер.

Я попытался создать WCF Message Interceptor, однако это не дает мне доступ к строке запроса RAW, также мне нужна эта строка RAW, доступная из метода веб-службы.

Мне нужен доступ к строке RAW, а также де-сериализованный объект JSON из метода веб-службы.

Возможно ли это в WCF?

Я знаю, что это может быть достигнуто с использованием нового API-интерфейса ASP.NET. но я не могу изменить наше приложение, так как все наши веб-службы построены поверх WCF REST (JSON), и они используются несколькими клиентами.

Запрос RAW требуется, поскольку на стороне клиента строка запроса RAW хэшируется Java и этот хеш отправляется в заголовке. Поэтому основной причиной доступа к этому запросу RAW является перерасчет хэша, чтобы проверить, не изменилось ли сообщение во время передачи.

FYI - Мы используем HTTP, но мы должны гарантировать, что сообщение не вмешивается, и это метод, который был реализован в нашей другой веб-службе Java, и нам нужно делать точные вещи в .NET. WCF REST тоже.

+0

вы можете добавить больше деталей с кодом –

+0

надеюсь, что пример кода достаточно. пожалуйста, дайте мне знать, что еще вам нужно, Большое вам спасибо за вашу помощь. –

+0

нет строки запроса. В какой-то момент в конвейере WCF у вас есть байты запроса (byte []), которые затем считываются кодеком сообщений, а затем преобразуются в объект сообщения. Даже если вы получите доступ к этим байтам в перехватчике сообщений, это будет другой уровень, который не имеет ничего общего с уровнем бизнес-логики. Рассмотрите возможность изменения типа входных параметров на строку, если это возможно, и проанализируйте ее в JSON самостоятельно со стороны службы. – Mimas

ответ

0

Вы можете получить доступ к содержимому запроса, прочитав Request.InputStream. Для этого необходимо включить параметр aspNetCompatibilityEnabled = "true" в Web.Config.

Смотрите ниже:

Dim requestContent = [String].Empty 
    Dim requestStream = System.Web.HttpContext.Current.Request.InputStream 
    Dim originalPosition = requestStream.Position 

    Using reader = New System.IO.StreamReader(requestStream) 
     requestContent = reader.ReadToEnd() 
    End Using 

    requestStream.Seek(originalPosition, SeekOrigin.Begin) 
    Return requestContent 
+0

спасибо, сэр, работал –