/// <summary> /// Sets response format and content type from request (IMessageInspector implementation) /// </summary> /// <param name="request"></param> /// <param name="channel"></param> /// <param name="instanceContext"></param> /// <returns></returns> public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { if (request != null) { var serviceType = instanceContext.Host.Description.ServiceType; var uriTemplateMatch = WebOperationContext.Current.IncomingRequest.UriTemplateMatch; if (uriTemplateMatch == null) return null; var methodName = (string)uriTemplateMatch.Data; var method = serviceType.GetMethods().Where(m => m.Name == methodName && m.IsPublic).SingleOrDefault(); var rcta = method.GetCustomAttribute<ReturnContentType>(true); var returnContentType = rcta != null ? rcta.ContentType : null; var messageContentTypes = new MessageContentTypes(request, returnContentType ?? EndpointDefaultContentType); var response = WebOperationContext.Current.OutgoingResponse; response.Format = messageContentTypes.Format; response.ContentType = messageContentTypes.ResponseContentType; } return null; }
public DeviceMessageDefinitionField CreateValidMessageField(SearchLocations searchLocation, MessageContentTypes contentType = MessageContentTypes.JSON, ParameterTypes parameterType = ParameterTypes.String) { var fld = new DeviceMessageDefinitionField(); fld.Key = "key"; fld.Name = "fld1"; switch (parameterType) { case ParameterTypes.DateTime: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.DateTime, Text = "Date Time" }; break; case ParameterTypes.Decimal: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.Decimal, Text = "Decimal" }; break; case ParameterTypes.GeoLocation: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.Geolocation, Text = "Geo Location" }; break; case ParameterTypes.Integer: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.Integer, Text = "Integer" }; break; case ParameterTypes.State: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.State, Text = "State" }; fld.StateSet = new EntityHeader <StateSet>() { Id = "abc123", Text = "text123" }; break; case ParameterTypes.String: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.String, Text = "String" }; break; case ParameterTypes.TrueFalse: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.TrueFalse, Text = "True/False" }; break; case ParameterTypes.ValueWithUnit: fld.StorageType = new Core.Models.EntityHeader <DeviceAdmin.Models.ParameterTypes>() { Id = TypeSystem.ValueWithUnit, Text = "value with unit" }; fld.UnitSet = new EntityHeader <UnitSet>() { Id = "abc123", Text = "text123" }; break; } switch (searchLocation) { case SearchLocations.Body: fld.SearchLocation = new Core.Models.EntityHeader <SearchLocations>() { Id = DeviceMessageDefinitionField.SearchLocation_Body, Text = "body" }; switch (contentType) { case MessageContentTypes.Binary: fld.BinaryOffset = 32; fld.ParsedBinaryFieldType = new Core.Models.EntityHeader <ParseBinaryValueType>() { Id = DeviceMessageDefinitionField.ParserStringType_String, Text = "uint64" }; break; /*case MessageContentTypes.Custom: * * break;*/ case MessageContentTypes.Delimited: fld.DelimitedIndex = 3; fld.ParsedStringFieldType = new Core.Models.EntityHeader <ParseStringValueType>() { Id = DeviceMessageDefinitionField.ParserStringType_String, Text = "abc123" }; break; case MessageContentTypes.JSON: fld.ParsedStringFieldType = new Core.Models.EntityHeader <ParseStringValueType>() { Id = DeviceMessageDefinitionField.ParserStringType_String, Text = "abc123" }; fld.JsonPath = "one.two.three"; break; case MessageContentTypes.StringRegEx: fld.ParsedStringFieldType = new Core.Models.EntityHeader <ParseStringValueType>() { Id = DeviceMessageDefinitionField.ParserStringType_String, Text = "abc123" }; fld.RegExGroupName = "somefield"; break; case MessageContentTypes.StringPosition: fld.ParsedStringFieldType = new Core.Models.EntityHeader <ParseStringValueType>() { Id = DeviceMessageDefinitionField.ParserStringType_String, Text = "abc123" }; fld.StartIndex = 5; fld.Length = 5; break; case MessageContentTypes.XML: fld.ParsedStringFieldType = new Core.Models.EntityHeader <ParseStringValueType>() { Id = DeviceMessageDefinitionField.ParserStringType_String, Text = "abc123" }; fld.XPath = "//foo/fee/fum"; break; } break; case SearchLocations.Header: fld.SearchLocation = new Core.Models.EntityHeader <SearchLocations>() { Id = DeviceMessageDefinitionField.SearchLocation_Headers, Text = "headers" }; break; case SearchLocations.Path: fld.SearchLocation = new Core.Models.EntityHeader <SearchLocations>() { Id = DeviceMessageDefinitionField.SearchLocation_Path, Text = "Path" }; fld.PathLocator = "/https/{foo}/fee"; break; case SearchLocations.QueryString: fld.SearchLocation = new Core.Models.EntityHeader <SearchLocations>() { Id = DeviceMessageDefinitionField.SearchLocation_QueryString, Text = "Query String" }; fld.PathLocator = "fieldone"; break; case SearchLocations.Topic: fld.SearchLocation = new Core.Models.EntityHeader <SearchLocations>() { Id = DeviceMessageDefinitionField.SearchLocation_Topic, Text = "Topic" }; break; } return(fld); }
protected DeviceMessageDefinition GetValidMessage(MessageContentTypes contenttype) { var msg = new DeviceMessageDefinition() { Name = "msg1234", MessageId = "msg1234", Key = "msg1234", MessageDirection = EntityHeader <MessageDirections> .Create(MessageDirections.Incoming), Id = Guid.NewGuid().ToId(), CreationDate = DateTime.Now.ToJSONString(), CreatedBy = new Core.Models.EntityHeader() { Id = Guid.NewGuid().ToId(), Text = "user name" } }; msg.LastUpdatedDate = msg.CreationDate; msg.LastUpdatedBy = msg.CreatedBy; switch (contenttype) { case MessageContentTypes.Binary: msg.ContentType = new Core.Models.EntityHeader <MessageContentTypes>() { Id = DeviceMessageDefinition.ContentType_Binary, Text = "Binary" }; msg.StringParsingStrategy = new Core.Models.EntityHeader <StringParsingStrategy>() { Id = DeviceMessageDefinition.StringParsingStrategy_NullTerminated, Text = "Null" }; msg.Endian = new Core.Models.EntityHeader <EndianTypes>() { Id = DeviceMessageDefinition.Endian_BigEndian, Text = "Little Endian" }; msg.BinaryParsingStrategy = new Core.Models.EntityHeader <BinaryParsingStrategy>() { Id = DeviceMessageDefinition.BinaryParsingStrategy_Absolute, Text = "AbsolutePosition" }; msg.StringLengthByteCount = 2; break; /* case MessageContentTypes.Custom: * msg.ContentType = new Core.Models.EntityHeader<MessageContentTypes>() { Id = DeviceMessageDefinition.ContentType_Custom, Text = "Custom" }; * msg.Script = "function() {do something, for now javascript validate}"; * break;*/; case MessageContentTypes.Delimited: msg.ContentType = new Core.Models.EntityHeader <MessageContentTypes>() { Id = DeviceMessageDefinition.ContentType_Delimited, Text = "Delimited" }; msg.Delimiter = ","; msg.QuotedText = false; break; case MessageContentTypes.JSON: msg.ContentType = new Core.Models.EntityHeader <MessageContentTypes>() { Id = DeviceMessageDefinition.ContentType_Json, Text = "JSON" }; break; case MessageContentTypes.StringRegEx: msg.ContentType = new Core.Models.EntityHeader <MessageContentTypes>() { Id = DeviceMessageDefinition.ContentType_StringRegEx, Text = "StringRegEx" }; msg.RegEx = "^parse_me_if_i_was_valid_reg_ex$"; break; case MessageContentTypes.StringPosition: msg.ContentType = new Core.Models.EntityHeader <MessageContentTypes>() { Id = DeviceMessageDefinition.ContentType_StringPosition, Text = "StringPosition" }; break; case MessageContentTypes.XML: msg.ContentType = new Core.Models.EntityHeader <MessageContentTypes>() { Id = DeviceMessageDefinition.ContentType_Xml, Text = "XML" }; break; } return(msg); }
public AllowableMessageContentTypeAttribute(MessageContentTypes contentType, bool isRequired = true, string customMessage = "") { ContentType = contentType; IsRequired = isRequired; CustomMessage = customMessage; }