Как я могу динамически настроить веб-службу .Net 3.5, использующую SSL?

Я пишу приложение, которому необходимо подключиться к веб-службе. При определенных обстоятельствах мне нужно переключить адрес конечной точки.

Я предполагаю, что это так же просто, как изменить System.ServiceModel.Description.ServiceEndpoint, когда необходимо изменить адрес. Однако, когда я делаю это, я получаю исключение, потому что для одного адреса требуется SSL, а для другого - нет.

Как я могу правильно обновить адрес конечной точки веб-служб?

Примечание. Это проект C #, .Net 3.5.


person RLH    schedule 24.09.2013    source источник
comment
Это работает для вас? stackoverflow.com/questions/1978962/   -  person dugas    schedule 24.09.2013
comment
Простите за незнание, но откуда прокси?   -  person RLH    schedule 24.09.2013
comment
Прочтите это: msdn.microsoft.com/en-us/library/ms733133 .aspx.   -  person dugas    schedule 24.09.2013
comment
Вы подключаетесь к службе wcf или веб-службе xml?   -  person dugas    schedule 24.09.2013
comment
Это XML, но это старая форма веб-службы ASP.net.   -  person RLH    schedule 24.09.2013
comment
Затем прочтите это: msdn.microsoft.com/en-us/library/ bb628649.aspx и измените свойство Url прокси, созданного при добавлении веб-ссылки.   -  person dugas    schedule 24.09.2013
comment
Я думаю, что прокси-подход - правильный способ решить эту проблему. Мне просто нужно придумать, как это сделать. Раньше вы могли просто обновить свойство Url в своем классе веб-службы. Похоже, так больше не работает. Я попытаюсь разобраться в этом самостоятельно, если только кто-то не знает более простого ответа.   -  person RLH    schedule 25.09.2013


Ответы (1)


Хорошо, я нашел решение. Когда Visual Studio генерирует классы-оболочки для вашей службы, [ServiceName]SoapClient имеет конструктор, который принимает привязку и конечную точку в качестве параметра. Определите их и просто передайте конструктору.

Вот псевдо-пример.

    void InitializeMyWebService(bool useSSLSite)
    {
        BasicHttpBinding b = useSSLSite ? 
            new BasicHttpBinding(BasicHttpSecurityMode.Transport) : 
            new BasicHttpBinding();

        EndpointAddress e = useSSLSite ? 
            new EndpointAddress("https://www.example.com/svc/MyWebService.asmx") :
            new EndpointAddress("http://intranet_server/svc/MyWebService.asmx");

        myWebService = new MyWebServiceSoapClient(b, e);
    }
}

MyWebService теперь будет работать, как определено параметром userSSLSite нашего метода.

person RLH    schedule 25.09.2013