У меня есть служба wcf, которую я сам размещаю в консольном приложении.
Когда я запускаю службу и развертываю ее на машине (назовите ее MyWCFRunningMachine), я могу перейти на страницу «Вы создали службу». (http://MyWCFRunningMachine:8090/MyService).
Но тогда он дает ссылку на страницу wsdl. Эта ссылка выглядит так: http://localhost:8090/MyService?wsdl
Поэтому, когда я нажимаю на эту ссылку, он пытается подключиться к службе, используя мой компьютер, а не MyWCFRunningMachine.
Если я ввожу холодный путь к wsdl (http://MyWCFRunningMachine:8090/MyService?wsdl), тогда я вижу wsdl в браузере. Но если я пытаюсь добавить ссылку на сервис, я получаю эту ошибку:
Документ понят, но не может быть обработан.
- Документ WSDL содержит ссылки, которые не могут быть разрешены.
- Произошла ошибка при загрузке 'http://localhost:8090/MyService?xsd=xsd0'.
Это также ссылка на localhost, когда не следует.
Вот код, который я использую для самостоятельного размещения моего сервиса:
public class SelfServiceHost
{
static string StartUpUrl {get{return "http://localhost:8090/MyService";}}
static void Main(string[] args) { StartupService(StartUpUrl); }
public static ServiceHost StartupService(string startUpUrl)
{
//+ Setup the Service
//Create a URI to serve as the base address
Uri httpUrl = new Uri(startUpUrl);
//Create ServiceHost
ServiceHost host = new ServiceHost(typeof(MyService), httpUrl);
//Add a service endpoint
host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), "");
//Enable metadata exchange
ServiceMetadataBehavior serviceMetadataBehavior =
new ServiceMetadataBehavior {HttpGetEnabled = true};
host.Description.Behaviors.Add(serviceMetadataBehavior);
//! Turn on Debug. Remove for production!
host.Description.Behaviors.Remove(typeof (ServiceDebugBehavior));
ServiceDebugBehavior serviceDebugBehavior =
new ServiceDebugBehavior {IncludeExceptionDetailInFaults = true};
host.Description.Behaviors.Add(serviceDebugBehavior);
//Start the Service
host.Open();
Console.WriteLine("Service is hosted at " + httpUrl);
Console.ReadLine();
return host;
}
}
Как я могу получить это, чтобы удалить localhost? (ПРИМЕЧАНИЕ. Я не могу жестко запрограммировать его в MyWCFRunningMachine. Эта служба будет работать на нескольких разных машинах.
Нужно ли мне использовать файл конфигурации, который я изменяю при перемещении компьютеров? (Я остался в стороне от файла конфигурации, потому что не хотел настраивать его для своего консольного приложения, но если это единственный способ, я сделаю это.)