/// <summary>名前解決(URL)</summary>
        /// <param name="name">名前</param>
        /// <param name="url">URL</param>
        /// <param name="timeout">タイムアウト</param>
        /// <param name="props">プロパティ</param>
        internal void NameResolutionProtocolUrl(string name, out string url, out int timeout, out Dictionary <string, string> props)
        {
            // 初期化
            url     = "";
            timeout = -1;
            props   = new Dictionary <string, string>();

            // 属性チェック用
            XmlNode xmlNode = null;

            // Transmissionタグを取得
            XmlElement xmlTransmission = this.XMLTMD_Protocol.GetElementById(name);

            // チェック
            if (xmlTransmission == null)
            {
                // Transmissionタグがない場合

                // 例外をスロー
                throw new FrameworkException(
                          FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                          String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                        String.Format(FrameworkExceptionMessage.NAMESERVICE_XML_FORMAT_ERROR_tm, name)));
            }
            else
            {
                // Transmissionタグがある場合

                #region URL

                // url属性
                xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_URL];

                if (xmlNode == null)
                {
                    // url属性なしの場合

                    // url_ref属性
                    xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_URL_REF];

                    if (xmlNode == null)
                    {
                        // url_ref属性なしの場合

                        // 例外をスロー
                        throw new FrameworkException(
                                  FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                  System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                                       System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url1, name)));
                    }
                    else
                    {
                        // url_ref属性ありの場合
                        string url_ref = xmlNode.Value;

                        if (this.XMLTMD_Protocol.GetElementById(url_ref) == null)
                        {
                            // IDFERからUrlタグを発見できない場合

                            // 例外をスロー
                            throw new FrameworkException(
                                      FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                      System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                                           System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url2, url_ref)));
                        }
                        else
                        {
                            // IDFERからUrlタグを発見できた場合

                            // value属性
                            xmlNode = this.XMLTMD_Protocol.GetElementById(url_ref).Attributes[FxLiteral.XML_CMN_ATTR_VALUE];

                            if (xmlNode == null)
                            {
                                // value属性なしの場合

                                // 例外をスロー
                                throw new FrameworkException(
                                          FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                          System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                                               System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url3, url_ref)));
                            }
                            else
                            {
                                // value属性ありの場合

                                // urlを取得
                                url = xmlNode.Value;

                                if (url == "")
                                {
                                    // urlが空の場合

                                    // 例外をスロー
                                    throw new FrameworkException(
                                              FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                              System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                                                   System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url4,
                                                                                        FxLiteral.XML_TM_PROTOCOL_TAG_URL, url_ref)));
                                }
                            }
                        }
                    }
                }
                else
                {
                    // url属性ありの場合

                    // urlを取得
                    url = xmlNode.Value;

                    if (url == "")
                    {
                        // urlが空の場合

                        // 例外をスロー
                        throw new FrameworkException(
                                  FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                  System.String.Format(
                                      FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                      System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url4,
                                                           FxLiteral.XML_TM_TAG_TRANSMISSION, name)));
                    }
                }

                #endregion

                #region タイムアウト

                // timeout属性
                xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_TIMEOUT];

                if (xmlNode == null)
                {
                    // timeout属性なしの場合 → なにもしない。
                }
                else
                {
                    // timeout属性ありの場合
                    string timeoutString = xmlNode.Value;

                    // チェック(数値か)
                    if (int.TryParse(timeoutString, out timeout))
                    {
                        // timeout = int.Parse(timeoutString);
                    }
                    else
                    {
                        // timeout値のフォーマットエラー

                        // 例外をスロー
                        throw new FrameworkException(
                                  FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                  String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                                String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_to, name)));
                    }
                }

                #endregion

                #region プロパティ

                // prop_ref属性
                xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_PROP_REF];

                if (xmlNode == null)
                {
                    // prop_ref属性なしの場合 → なにもしない。
                }
                else
                {
                    // prop_ref属性ありの場合
                    string prop_ref = xmlNode.Value;

                    if (this.XMLTMD_Protocol.GetElementById(prop_ref) == null)
                    {
                        // IDFERからPropタグを発見できない場合

                        // 例外をスロー
                        throw new FrameworkException(
                                  FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                  String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                                String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_prop1, prop_ref)));
                    }
                    else
                    {
                        // IDFERからPropタグを発見できた場合

                        // value属性
                        xmlNode = this.XMLTMD_Protocol.GetElementById(prop_ref).Attributes[FxLiteral.XML_CMN_ATTR_VALUE];

                        // プロパティ文字列を取得
                        if (xmlNode == null)
                        {
                            // value属性なしの場合

                            // 例外をスロー
                            throw new FrameworkException(
                                      FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0],
                                      String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1],
                                                    String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_prop2, prop_ref)));
                        }
                        else
                        {
                            // value属性ありの場合

                            // プロパティ文字列をディクショナリに変換
                            string propStr = xmlNode.Value;
                            props = StringVariableOperator.GetPropsFromPropString(propStr);
                        }
                    }
                }

                #endregion
            }
        }
Пример #2
0
 public static Dictionary <string, string> GetPropsFromPropString(string propString)
 {
     return(StringVariableOperator.GetPropsFromPropString(propString));
 }