/////////////////////////////////////////////////////////////////////////////////// //These 2 implementations for IDispatchMessageInspector get called for every call object IDispatchMessageInspector.AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext) { //log http request string msgName = "SOAPRequestMultispeak" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xml"; LogHttpMessageRequest(msgName, ref request); //log original message LogMessage(msgName, ref request); LogEvent("MultispeakMessageInspector", "AfterReceiveRequest()", "Original Message: " + msgName); if (SOAPUtility.GetOperationName() == "StakedWorkOrderNotification") { //transform malformed Stakeout message request = MultispeakTransformer.Transform(ref request); //log transformed message msgName = "SOAPRequestMultispeakTransFormed" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xml"; LogMessage(msgName, ref request); LogEvent("MultispeakMessageInspector", "AfterReceiveRequest()", "Transformed Malformed Message: " + msgName); } if (validateRequest) { // inspect the message. If a validation error occurs, the thrown fault exception bubbles up. SOAPMessageValidator smv = new SOAPMessageValidator(schemaSet, validateRequest, validateReply, isClientSide); smv.ValidateMessageBody(ref request, true); LogEvent("MultispeakMessageInspector", "AfterReceiveRequest()", "WSDL Schema Validated"); } LogEvent("MultispeakMessageInspector", "AfterReceiveRequest()", "Completed"); return("MyCustomToken"); }
public static Message Transform(ref Message OldMessage) { XmlDocument xmldoc = SOAPUtility.LoadMessageBodyBufferToXmlDocument(ref OldMessage); XmlUtility.RemoveAttributeFromXmlDocument(xmldoc, "xmlns", string.Empty); XmlUtility.RemoveNodeChildrenFromXmlDocument(xmldoc, "mapLocation"); XmlDictionaryReader xr = XmlUtility.LoadXmlReader(xmldoc); Message msg = SOAPUtility.CreateNewMessageFromBodyContents(xr, ref OldMessage); return(msg); }