Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > WS Dynamic URL


Автор: Monomachus 31.3.2008, 20:56
Прет всем! 
В общем проблема заключается в том что у меня 2 модуля: DАL, UI. Теперь в  DАL я создал динамическую вэб референс (ссылку). Сразу у мня в app.config DAL заносится поле с  этой ссылкой что-нить типа 
Код

 <P5_PLA.DAL.Properties.Settings>
            <setting name="P5_PLA_DAL_WsPLA_WsPLA" serializeAs="String">
                <value>http://192.168.7.177:8080/WsPLA/services/WsPLA</value>
            </setting>
            <setting name="SRC" serializeAs="String">
                <value>inp</value>
            </setting>
        </P5_PLA.DAL.Properties.Settings>

 теперь я чтоб потом можно было менять эту ссылку переписываю эти секции в UI app.config
теперь когда я в UI app.config меняю значение поля 
Код

<setting name="P5_PLA_DAL_WsPLA_WsPLA" serializeAs="String">
                <value>http://192.168.7.177:8080/WsPLA/services/WsPLA</value>
            </setting>

то все должно было бы быть хорошо но вот какая проблема если я меняю значение в UI app.config или app.config DAL (не то которое я изначально ввел в Properties Solution Explorera), то у меня следующая проблема возникает. Мне пишут что 
Код

public WSAgencesAccessor()
        {
            ws = new P5_PLA.DAL.WsPLA.WsPLA();
           // kogda stavim siuda BreakPoint vidim 4to ws.Url = tomu 4to stoit u nas v UI app.config
        }
        #endregion

        #region Get
        public AgencesDataSet.T_AgencesDataTable GetAgences()
        {
            string responce = ws.WsPLAGetAllAgences001(DataUtils.SessionId, Properties.Settings.Default.SRC, DataUtils.SessionIp);
            // responce tut ravno null
            AgencesDataSet ds = new AgencesDataSet();
            new DataUtils().ManageXMLResponceGet(responce, ds);
            
            return ds.T_Agences;
        }


responce равно нуллу хотя ВС работают через Эклипс в WDSL проверял. Теперь если я меняю значение на то которое я указал в Properties Solution Explorera то никакой ошибки не возникает и все работает. Казалось бы если это Dynamic WS  то менятся оно должно само (т.е. считывать с UI app.configа), но в Reference.cs вставляется именно адрес изначальной ссылки. 
Код

 /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.1433")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name="WsPLAHttpBinding", Namespace="http://localhost:8080/WsPLA/services/WsPLA")]
    public partial class WsPLA : System.Web.Services.Protocols.SoapHttpClientProtocol {
        
        private System.Threading.SendOrPostCallback WsPLAGetUsers001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLAGetAllProjets001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLAAjoutPlanif001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLADeletePlanif001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLAAjoutProjet001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLAGetProjetById001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLAGetPlanifs001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLAGetAllAgences001OperationCompleted;
        
        private System.Threading.SendOrPostCallback WsPLAGetAgenceById001OperationCompleted;
        
        private bool useDefaultCredentialsSetExplicitly;
        
        /// <remarks/>
        public WsPLA() {
            this.Url = global::P5_PLA.DAL.Properties.Settings.Default.P5_PLA_DAL_WsPLA_WsPLA;
            if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
                this.UseDefaultCredentials = true;
                this.useDefaultCredentialsSetExplicitly = false;
            }
            else {
                this.useDefaultCredentialsSetExplicitly = true;
            }
        }
        
        public new string Url {
            get {
                return base.Url;
            }
            set {
                if ((((this.IsLocalFileSystemWebService(base.Url) == true) 
                            && (this.useDefaultCredentialsSetExplicitly == false)) 
                            && (this.IsLocalFileSystemWebService(value) == false))) {
                    base.UseDefaultCredentials = false;
                }
                base.Url = value;
            }
        }
        
        public new bool UseDefaultCredentials {
            get {
                return base.UseDefaultCredentials;
            }
            set {
                base.UseDefaultCredentials = value;
                this.useDefaultCredentialsSetExplicitly = true;
            }
        }
        
        /// <remarks/>
        public event WsPLAGetUsers001CompletedEventHandler WsPLAGetUsers001Completed;
        
        /// <remarks/>
        public event WsPLAGetAllProjets001CompletedEventHandler WsPLAGetAllProjets001Completed;
        
        /// <remarks/>
        public event WsPLAAjoutPlanif001CompletedEventHandler WsPLAAjoutPlanif001Completed;
        
        /// <remarks/>
        public event WsPLADeletePlanif001CompletedEventHandler WsPLADeletePlanif001Completed;
        
        /// <remarks/>
        public event WsPLAAjoutProjet001CompletedEventHandler WsPLAAjoutProjet001Completed;
        
        /// <remarks/>
        public event WsPLAGetProjetById001CompletedEventHandler WsPLAGetProjetById001Completed;
        
        /// <remarks/>
        public event WsPLAGetPlanifs001CompletedEventHandler WsPLAGetPlanifs001Completed;
        
        /// <remarks/>
        public event WsPLAGetAllAgences001CompletedEventHandler WsPLAGetAllAgences001Completed;
        
        /// <remarks/>
        public event WsPLAGetAgenceById001CompletedEventHandler WsPLAGetAgenceById001Completed;
        
        /// <remarks/>
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://localhost:8080/WsPLA/services/WsPLA", ResponseNamespace="http://localhost:8080/WsPLA/services/WsPLA", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        [return: System.Xml.Serialization.XmlElementAttribute("out", IsNullable=true)]
        public string WsPLAGetUsers001([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string in0, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string in1, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string in2, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string in3) {
            object[] results = this.Invoke("WsPLAGetUsers001", new object[] {
                        in0,
                        in1,
                        in2,
                        in3});
            return ((string)(results[0]));
        }

...

Опять же если я меняю значение в Properties Solution Explorera на то что UI app.config то все красиво. Теперь вопрос где моя ошибка и как сделать так чтоб можно было менять URL WS прямо из <AppName.exe>.config?





Автор: mr.DUDA 1.4.2008, 10:33
Что-то я не совсем понял, надо чтобы урл к веб-сервису в прокси классе подставлялся автоматически из конфига сервера? Или как?

Автор: Monomachus 1.4.2008, 11:15
Мда. Просто сейчас я если меняю УРЛ (не тот что в Properties),  то мне выдает ArgumentNullException то есть весь ответ равен нуллу
Код

 string responce = ws.WsPLAGetAllAgences001(DataUtils.SessionId, Properties.Settings.Default.SRC, DataUtils.SessionIp);
            // responce tut ravno null

и потом когда я его использую естественно выходит Exception, теперь у меня не возникает проблем когда УРЛ из конфига совпадает с тем что в Reference.cs (ws.Url всегда тот что в конфиге). Соответственно я хочу чтобы проблем не возникало, + чтоб сказали где ошибка чтоб на те же грабли не наступать. Т.е. при смене урл в конфиге он менялся и в Reference.cs.

Автор: mr.DUDA 1.4.2008, 16:46
AFAIK, нужно руками прописывать Url после создания объекта прокси. Могу ошибаться, но так по крайней мере делали на конторе где я когда-то работал. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)