Динмически потреблять веб-сервис в Monotouch - PullRequest
1 голос
/ 21 сентября 2011

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

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

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

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

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

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

Любой совет будет оценен.

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

РЕДАКТИРОВАТЬ - я, вероятно, должен упомянуть, что мы используем веб-сервисы в стиле 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);
0 голосов
/ 21 сентября 2011

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

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

...