示例#1
0
 /// <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);
        }
示例#3
0
        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);
        }
示例#4
0
 public AllowableMessageContentTypeAttribute(MessageContentTypes contentType, bool isRequired = true, string customMessage = "")
 {
     ContentType   = contentType;
     IsRequired    = isRequired;
     CustomMessage = customMessage;
 }