예제 #1
0
        /// <summary>
        /// Validate a MessageMetadataType object.
        /// </summary>
        /// <param name="metadata">The object to be validated.</param>
        public static void ValidateMetadata(MessageMetadataType metadata)
        {
            // Validate metadata
            Validation.ValidateArgumentRequired("metadata", metadata);
            Validation.ValidateDateTime("metadata.creationTime", metadata.creationTime);
            Validation.ValidateArgumentRequired("metadata.invocationId", metadata.invocationId);
            Validation.ValidateArgumentRequired("metadata.receiverOrganisation", metadata.receiverOrganisation);
            Validation.ValidateArgumentRequired("metadata.senderOrganisation", metadata.senderOrganisation);
            Validation.ValidateArgumentRequired("metadata.serviceCategory", metadata.serviceCategory);
            Validation.ValidateArgumentRequired("metadata.serviceInterface", metadata.serviceInterface);
            Validation.ValidateStringMatch("metadata.serviceInterface", metadata.serviceInterface, ServiceInterfaces.SimdServiceInterface);

            // Validate that route record hasn't been specified
            Validation.ValidateArgumentNotAllowed("metadata.routeRecord", metadata.routeRecord);

            // Other transport metadata
            if (metadata.otherTransportMetadata != null && metadata.otherTransportMetadata.Length > 0)
            {
                for (int x = 0; x < metadata.otherTransportMetadata.Length; x++)
                {
                    OtherTransportMetadataEntryType omt = metadata.otherTransportMetadata[x];
                    Validation.ValidateArgumentRequired(string.Format("metadata.otherTransportMetadata[{0}].metadataType", x), omt.metadataType);
                    Validation.ValidateArgumentRequired(string.Format("metadata.otherTransportMetadata[{0}].metadataValue", x), omt.metadataValue);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Deliver one or more Transport Responses to a Sender, Sender Intermediary or Receiver Intermediary.
        /// </summary>
        /// <param name="responses">The list of Transport Responses to deliver.</param>
        /// <param name="endpointUrl">The endpoint of the TRD service.</param>
        /// <returns>A value indicating if the operation is successful.</returns>
        public deliverResponse Deliver(List <TransportResponseType> responses, Uri endpointUrl)
        {
            Validation.ValidateArgumentRequired("responses", responses);
            Validation.ValidateArgumentRequired("endpointUrl", endpointUrl);

            Validation.ValidateArgumentRequired("responses", responses);
            for (int x = 0; x < responses.Count; x++)
            {
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].deliveryResponse", x), responses[x].deliveryResponse);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].deliveryResponse.message", x), responses[x].deliveryResponse.message);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].deliveryResponse.responseCode", x), responses[x].deliveryResponse.responseCode);
                if (responses[x].deliveryResponse.responseClass == ResponseClassType.Success)
                {
                    Validation.ValidateArgumentRequired(string.Format("responses[{0}].deliveryResponse.digestValue", x), responses[x].deliveryResponse.digestValue);
                }

                // Validate metadata
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata", x), responses[x].metadata);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.invocationId", x), responses[x].metadata.invocationId);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.responseId", x), responses[x].metadata.responseId);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.receiverOrganisation", x), responses[x].metadata.receiverOrganisation);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.senderOrganisation", x), responses[x].metadata.senderOrganisation);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.serviceCategory", x), responses[x].metadata.serviceCategory);
                Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.sourceOrganisation", x), responses[x].metadata.sourceOrganisation);
                Validation.ValidateDateTime(string.Format("responses[{0}].metadata.transportResponseTime", x), responses[x].metadata.transportResponseTime);

                // Other transport metadata
                if (responses[x].metadata.otherTransportMetadata != null && responses[x].metadata.otherTransportMetadata.Length > 0)
                {
                    for (int y = 0; y < responses[x].metadata.otherTransportMetadata.Length; y++)
                    {
                        OtherTransportMetadataEntryType omt = responses[x].metadata.otherTransportMetadata[y];
                        Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.otherTransportMetadata[{1}].metadataType", x, y), omt.metadataType);
                        Validation.ValidateArgumentRequired(string.Format("responses[{0}].metadata.otherTransportMetadata[{1}].metadataValue", x, y), omt.metadataValue);
                    }
                }
            }

            if (trdClient is Nehta.SMD2010.TRD.TransportResponseDeliveryClient)
            {
                Nehta.SMD2010.TRD.TransportResponseDeliveryClient client = (Nehta.SMD2010.TRD.TransportResponseDeliveryClient)trdClient;
                client.Endpoint.Address = new EndpointAddress(endpointUrl.ToString());
            }

            deliverRequest request = new deliverRequest();

            request.deliver = responses.ToArray();

            deliverResponse1 response = trdClient.deliver(request);

            if (response != null && response.deliverResponse != null)
            {
                return(response.deliverResponse);
            }
            else
            {
                throw new ApplicationException(Properties.Resources.UnexpectedServiceResponse);
            }
        }
        /// <summary>
        /// Validate a MessageMetadataType object.
        /// </summary>
        /// <param name="metadata">The object to be validated.</param>
        public static void ValidateMetadata(MessageMetadataType metadata)
        {
            // Validate metadata
            Validation.ValidateArgumentRequired("metadata", metadata);
            Validation.ValidateDateTime("metadata.creationTime", metadata.creationTime);
            Validation.ValidateArgumentRequired("metadata.invocationId", metadata.invocationId);
            Validation.ValidateArgumentRequired("metadata.receiverOrganisation", metadata.receiverOrganisation);
            Validation.ValidateArgumentRequired("metadata.senderOrganisation", metadata.senderOrganisation);
            Validation.ValidateArgumentRequired("metadata.serviceCategory", metadata.serviceCategory);
            Validation.ValidateArgumentRequired("metadata.serviceInterface", metadata.serviceInterface);
            Validation.ValidateStringMatch("metadata.serviceInterface", metadata.serviceInterface, ServiceInterfaces.SmdServiceInterface);

            if (metadata.routeRecord != null && metadata.routeRecord.Length > 0)
            {
                for (int x = 0; x < metadata.routeRecord.Length; x++)
                {
                    // Validate interaction type
                    InteractionType it = metadata.routeRecord[x].interaction;
                    Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction", x), it);
                    Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.serviceCategory", x), it.serviceCategory);
                    Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.serviceEndpoint", x), it.serviceEndpoint);
                    Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.serviceInterface", x), it.serviceInterface);
                    Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.serviceProvider", x), it.serviceProvider);
                    Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.target", x), it.target);
                    Validation.ValidateStringMatch(string.Format("metadata.routeRecord[{0}].interaction.serviceInterface", x), it.serviceInterface, ServiceInterfaces.TrdServiceInterface);

                    // Validate cert refs if available
                    if (it.certRef != null && it.certRef.Length > 0)
                    {
                        for (int y = 0; y < it.certRef.Length; y++)
                        {
                            Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.certRef[{1}].useQualifier", x, y), it.certRef[y].useQualifier);
                            Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.certRef[{1}].qualifiedCertRef", x, y), it.certRef[y].qualifiedCertRef);
                            Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.certRef[{1}].qualifiedCertRef.type", x, y), it.certRef[y].qualifiedCertRef.type);
                            Validation.ValidateArgumentRequired(string.Format("metadata.routeRecord[{0}].interaction.certRef[{1}].qualifiedCertRef.value", x, y), it.certRef[y].qualifiedCertRef.value);
                        }
                    }
                }
            }

            // Other transport metadata
            if (metadata.otherTransportMetadata != null && metadata.otherTransportMetadata.Length > 0)
            {
                for (int x = 0; x < metadata.otherTransportMetadata.Length; x++)
                {
                    OtherTransportMetadataEntryType omt = metadata.otherTransportMetadata[x];
                    Validation.ValidateArgumentRequired(string.Format("metadata.otherTransportMetadata[{0}].metadataType", x), omt.metadataType);
                    Validation.ValidateArgumentRequired(string.Format("metadata.otherTransportMetadata[{0}].metadataValue", x), omt.metadataValue);
                }
            }
        }