Я хочу создать приложение C #, которое взаимодействует с двумя веб-сервисами SOAP.Эти веб-сервисы (файлы WSDL) используют один и тот же URL
<root>/...dirPath.../dms.cfc?wsdl <root>/...dirPath.../cobra.cfc?wsdl
<root> должен быть динамическим, поскольку пользователь приложения должен установить эту переменную.
<root>
Прежде всего, я взял это
Как динамически переключать адреса веб-служб в .NET без перекомпиляции?
и пробовал это
https://www.codeproject.com/Articles/12317/How-to-make-your-Web-Reference-proxy-URL-dynamic
Далее янашел эту ссылку
https://docs.microsoft.com/en-us/sql/reporting-services/report-server-web-service/net-framework/setting-the-url-property-of-the-web-service?view=sql-server-2017
, но эти ссылки не помогли. Я не могу найти настройки URL behaviour и не могу получить доступ к свойству URL по коду.
URL behaviour
Я создал статический класс, который должен обрабатывать оба веб-сервиса.Пользователь может изменить корневой URL-адрес веб-службы.
Пример URL-адреса:
http://localhost:8500/CoBRA/...dirPath.../dms.cfc?wsdl
или
http://myInstance.com/CoBRA/...dirPath.../dms.cfc?wsdl
обрабатывается этим кодом
public static class CoBRAService { private static cobraClient cobraBaseClient = new cobraClient(); private static dmsClient cobraDmsClient = new dmsClient(); public static void SetWebserviceRootUrl(string rootUrl) { // cobraBaseClient.url = $"{rootUrl}/path/dms.cfc?wsdl"; // cobraDmsClient.url = $"{rootUrl}/path/cobra.cfc?wsdl"; } }
Оба веб-сервиса не наследуются от System.Web.Services.Protocols.SoapHttpClientProtocol Они реализуют это public partial class cobraClient : System.ServiceModel.ClientBase<MyProject.CoBRA_Base.cobra>, MyProject.CoBRA_Base.cobra
System.Web.Services.Protocols.SoapHttpClientProtocol
public partial class cobraClient : System.ServiceModel.ClientBase<MyProject.CoBRA_Base.cobra>, MyProject.CoBRA_Base.cobra
Это структура моего проекта
Где можно установить URL-адрес веб-службы или как получить доступ к свойству url?
если ваши "CoBRA_BaseClient" и "CoBRA_DMSClient" унаследованы от System.ServiceModel.ClientBase , тогда вы можете попробовать следующее:
public static CoBRA_BaseClient CreateService() { CoBRA_BaseClient service = new CoBRA_BaseClient(); service.Endpoint.Address = new EndpointAddress("uri"); return service; } public static CoBRA_DMSClient CreateService() { CoBRA_DMSClient service = new CoBRA_DMSClient(); service.Endpoint.Address = new EndpointAddress("uri"); return service; }