Передача информации из SoapExtension в WebMethod - PullRequest
1 голос
/ 26 апреля 2011

В настоящее время у меня есть большой набор веб-сервисов ASMX, которые регистрируют входящие и исходящие объекты, сериализуя их в xml и сохраняя этот xml в моей базе данных;этот процесс регистрации происходит в самом веб-методе. (Я знаю. Я знаю. Я должен использовать WCF, и я пытаюсь поднять этот мяч в гору, но моя организация старая и медленная)

Вместо того, чтобы сериализовать объект, я бы предпочел просто использовать Soap Extension и регистрировать все SOAP-сообщения, которые они отправляют, и все SOAP-сообщения, которые я возвращаю.Используя пример Microsoft в качестве основы, у меня это отлично работает.Моя проблема заключается в том, что, когда я записываю запрос SOAP в базу данных, я генерирую уникальный ключ, который соответствует этому запросу и может использоваться для поиска запроса в базе данных.Я хотел бы передать этот ключ моему веб-методу, чтобы его можно было использовать для регистрации другой информации, соответствующей запросу (ошибки, метрики и т. Д.).Однако я не могу найти способ получить этот ключ для веб-метода, чтобы веб-метод мог хранить в базе данных дополнительную информацию о запросе.

Возможно ли это, и если да, то что лучше?метод?

Спасибо, что уделили время.

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Вы должны заглянуть в журнал, используя класс CorrelationManager .Вы запустите логическую операцию в SoapExtension по запросу и остановите ее в соответствующем ответе.В ваших журналах должно отображаться точное совпадение запроса на ответ, включая дополнительную информацию, которую вы хотите зарегистрировать.

Уникальный идентификатор (GUID) будет доступен как Trace.CorrelationManager.ActivityId.

0 голосов
/ 26 апреля 2011

Почему бы просто не иметь глобальный флаг (или что-то более сложное, чтобы предотвратить проблемы многопоточности), установить его в расширении мыла на стороне сервера для текущего идентификатора запроса и прочитать его в методе на стороне сервера?

...