Динамическое использование веб-службы в Monotouch

У меня есть проблема, надеюсь, кто-то может дать мне совет.

Я создаю корпоративное приложение для iPhone, которое будет собирать информацию и записывать ее на локальный сервер.

В зависимости от того, на каком из наших сайтов находится пользователь, зависит, на какой сервер записывается информация.

Я создал веб-сервис, который я могу использовать в monotouch и передавать ему информацию, которую он затем запишет в базу данных SQL на локальном сервере. Проблема, с которой я сталкиваюсь, заключается в том, как мне сделать это для всех наших местоположений? Если я размещу веб-службу в каждом месте, тогда для каждого места потребуется своя собственная версия приложения, которое пишет с использованием своего веб-сервиса (все серверы находятся в одной сети и не являются отдельными)

Могу ли я динамически использовать веб-сервис, передавая соответствующий URL-адрес?

Должен ли я использовать другой подход?

Любой совет будет принят во внимание.


person JonBull2013    schedule 21.09.2011    source источник


Ответы (2)


РЕДАКТИРОВАТЬ. Я, вероятно, должен упомянуть, что мы используем веб-службы в стиле WCF, которые требуют создания привязок с помощью SISvcUtil.exe (отсюда берется класс WebServiceClient).

Мы делаем что-то подобное, когда у нас есть тестовый сервер и рабочий сервер, и просто изменить URL-адрес, на который указывает веб-сервис. Очевидно, это предполагает, что веб-служба, размещенная во всех разных местах, одинакова...

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

BasicHttpBinding binding = new BasicHttpBinding();
binding.OpenTimeout = new TimeSpan(0,1,0);
binding.CloseTimeout = new TimeSpan(0,1,0);
binding.SendTimeout = new TimeSpan(0,1,0);
//snip - any other bindings you need to specify...

string fullDomain;
string domain;

if (local)
    domain = "local.server.com";
else
    domain = "production.server.com";

fullDomain = string.Format("https://{0}/WebService/Service.svc", domain);

EndpointAddress endpointAddress = new EndpointAddress(fullDomain);

WebServiceClient client = new WebServiceClient(binding, endpointAddress);
person Luke    schedule 21.09.2011
comment
этот пример используется в монотач? Я не могу найти ссылку на WebServiceClient? - person JonBull2013; 21.09.2011
comment
Смотрите мое редактирование - оно должно дать больше контекста. Я предполагаю, что вы используете традиционные веб-службы .NET? - person Luke; 22.09.2011

да. Должен быть либо конструктор, либо свойство Url, которое вы можете установить, что позволит вам передавать URL-адрес различным конечным точкам службы во время выполнения.

(Я предполагаю, что вы говорите о нескольких экземплярах одной и той же веб-службы, размещенных по разным URL-адресам)

person tomfanning    schedule 21.09.2011