Используется ли в файле конфигурации для вашей службы (не клиента) конечные точки с полностью определенными адресами (например, в конфигурации клиента)? Если это так, то причина, по которой вы видите все эти ссылки на локальные хосты, заключается в том, что когда вы добавляете ссылку на службу, она будет переносить этот адрес в сгенерированных файлах.
Обновите конечную точку в файле конфигурации службы, чтобы использовать либо полный адрес на этом компьютере (т. Е. http://somname.com/service.svc
), либо задайте для baseAddresses в файле конфигурации имя машины.
Кроме того, если вы используете WCF 4.0 (VS 2010 / .NET 4.0), вы можете сделать так, чтобы WCF создал конечную точку по умолчанию для ваших служб, полностью исключив конечные точки из файла конфигурации (насколько я понимаю - сейчас мы просто переходим на 4.0 на работе, поэтому я не играл с новыми функциями).
ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ
Новый подход, та же основная идея (что URI импортируется откуда-то). Исходя из ваших комментариев ниже, похоже, что конфигурация вашего сервиса настроена нормально, без жестко закодированных URI, указывающих на localhost.
Когда вы перемещаете свое приложение на целевой сервер (-ы), обновляете ли вы также свою ссылку на свою службу (с помощью Добавить ссылку на службу) или просто перемещаете файлы, которые генерируются из вашего локального ящика, на целевой сервер?
Если да, мне интересно, может ли это быть источником вашей проблемы. Я бы подумал , что указание адреса службы при создании клиента должно переопределять что-либо в файлах, связанных с WSDL, но, возможно, это не так.
Что-то попробовать:
Удалите раздел <client>
из своего Web.config. Затем, когда вы создаете клиент, сделайте так:
fileManager = new FileManagerClient(new BasicHttpBinding("CustomBinding_FileManager"), new EndpointAddress("http://" + Settings.Host + "/FileManager.svc"));
Убедитесь, что вы передали имя раздела конфигурации привязки в конструкторе BasicHttpBinding
, иначе вы получите привязку со значениями по умолчанию, а не с большими значениями, которые вы указали.
Идея заключается в том, чтобы исключить любую вероятность того, что настройки файла конфигурации клиента переопределяют то, что вы передаете при создании FileManagerClient.
Я бы посоветовал обновлять справочную информацию о сервисах для каждого развертывания на каждом отдельном сервере менее чем идеально - то, что вы пытаетесь выполнить, имеет смысл. Я делаю нечто подобное в написанном мной n-уровневом приложении - единственное отличие состоит в том, что я не использую ссылки на сервисы, я генерирую прокси-сервер через SvcUtil, а затем генерирую каналы через ChannelFactory<T>
, что является еще одним маршрутом, который вам может понадобиться смотреть.
Если ничего из этого не помогло, пожалуйста, напишите мне по электронной почте (мой адрес электронной почты указан в моем профиле) - может быть проще выяснить это с помощью обмена электронной почтой, а затем опубликовать окончательное решение.