Хостинг WCF только с кодом имеет localhost в ссылке на wsdl - PullRequest
1 голос
/ 18 августа 2011

У меня есть служба 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. Эта служба будет работать на нескольких разных машинах.

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

1 Ответ

1 голос
/ 18 августа 2011

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

"http://" + MACHINE_NAME +": 8090 / MyService "

После установки службы измените это значение в файле конфигурации и перезапустите службу, чтобы ввести его.

...