Изменение адреса службы во время выполнения - PullRequest
1 голос
/ 11 марта 2011

Мой веб-конфиг на стороне клиента вот так

    <client>
        <endpoint address="http://192.168.1.7/zfsapi/api.php" binding="basicHttpBinding"
            bindingConfiguration="ZfsSoapBinding" contract="SourceAPI.ZfsSoapPort"
            name="ZfsSoapPort" />          
    </client>

И я проверяю свой адрес во время выполнения, как это

        EndpointAddress epa1 = new EndpointAddress("http://192.168.1.7/zfsapi/api.php");
        DemoChangingAddressApi.SourceAPI.ZfsSoapPortClient oservice = new SourceAPI.ZfsSoapPortClient(binding1, epa1);
        DemoChangingAddressApi.SourceAPI.ZfsVolume[] v1 = oservice.getVolumeList();


       // or instantiate whatever other binding you're using    
        BasicHttpBinding binding = new BasicHttpBinding();

       // define the endpoint address
        EndpointAddress epa = new EndpointAddress("http://192.168.1.8/zfsapi/api.php");

       // create your WCF client-side proxy based on those settings
       DemoChangingAddressApi.SourceAPI.ZfsSoapPortClient oservice1 = new SourceAPI.ZfsSoapPortClient(binding, epa);
       DemoChangingAddressApi.SourceAPI.ZfsVolume[] v2 = oservice1.getVolumeList();

когда я делаю это, я получаю ошибку @ DemoChangingAddressApi.SourceAPI.ZfsVolume[] v2 = oservice1.getVolumeList();

Ошибка:

Ошибка в десериализации тела ответа сообщение для операции 'getVolumeList'.

как я могу изменить адрес во время выполнения услуги

1 Ответ

0 голосов
/ 11 марта 2011

если вы обращаетесь к файлу web.config в формате xml, вы всегда можете это сделать во время выполнения: Что-то вроде этого: // в приведенном ниже коде у меня было требование делать копии сайта динамически

        // Set the root path of the Web application that contains the
        // Web.config file that you want to access.
        string configPath = ConfigurationManager.AppSettings["appRoot"] + virtualDirectoryName + "\\";

        XmlDocument doc = new XmlDocument();
        bool change = false;
        string configFile = Path.Combine(configPath, "web.config");
        doc.Load(configFile);

        //get root element
        System.Xml.XmlElement Root = doc.DocumentElement;
        //I have created appSettings dictionary that holds key/value pairs that wanted to update in section.
        Dictionary<string, object> appSettings = new Dictionary<string, object>();
        appSettings.Add("connString", "server=" + serverAddressAppDb +
                            "; uid=" + uidAppDb + "; pwd=" + pwdAppDb +
                            "; database=" + virtualDirectoryName + "; min pool size=1; max pool size=100;");
        appSettings.Add("applogin", urlApp + virtualDirectoryName + "/login.aspx");
        appSettings.Add("appUrl", urlApp + virtualDirectoryName);
        appSettings.Add("mailer_completeImagePath", urlApp + virtualDirectoryName + "/backgrounds/");
        appSettings.Add("mailer_pathImagesComplete", urlApp + virtualDirectoryName + "/images/");

        // Now the code below will go loop through each key/value pair under section and will compare the values in with appSettings dictionary. If it sees values are different, It will update in section.
        XmlNode appNode = Root["appSettings"];
        foreach (XmlNode node in appNode.ChildNodes)
        {
            if (node.Attributes != null)
            {
                try
                {
                    string key = node.Attributes.GetNamedItem("key").Value;
                    string value = node.Attributes.GetNamedItem("value").Value;
                    if (appSettings.ContainsKey(key) && value != appSettings[key].ToString())
                    {
                        node.Attributes.GetNamedItem("value").Value = appSettings[key].ToString();
                        change = true;
                    }
                }
                catch (Exception e)
                {
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...