Почему я получаю исключение WCF "HTTP не может зарегистрировать URL http://+:80/MyService/" - PullRequest
0 голосов
/ 02 декабря 2010

Я создаю свой хост с адресом конечной точки, который он должен использовать, например:

Uri endpointAddress = new Uri("http://127.0.0.1:5555/MyService");
ServiceHost host = new ServiceHost(myServiceType, endpointAddress);
host.AddServiceEndpoint(implementedContract, basicHttpBinding, string.Empty);

, но когда я позже делаю host.Open();, я получаю исключение "HTTP не может зарегистрировать URL http://+:80/MyService/ потому что TCP-порт 80 используется другим приложением ".Результат тот же, когда я делаю

host.AddServiceEndpoint(implementedContract, basicHttpBinding, endpointAddress);

Почему он пытается что-то сделать с портом 80?Как я могу решить эту проблему?

Обновление Пытаясь предоставить более полный пример кода, я нашел виновника.Я добавил ServiceMetadataBehavior следующим образом:

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.ExternalMetadataLocation = new Uri(this.ExternalMetadataLocation);
smb.HttpGetEnabled = true;
smb.HttpGetUrl = this.RemovePort(this.EndpointAddress);
host.Description.Behaviors.Add(smb());

Похоже, в прошлом мне нужно было удалить порт из URL, чтобы заставить это работать, но теперь именно это и вызывает проблему.

Так что Пратик прав: проблема заключалась в метаданных, и, конечно, проблема с портом 80 в том, что есть некое новое приложение, использующее этот порт.1023 *

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Это связано с тем, что порт 80 уже используется другим приложением, как говорится в сообщении об ошибке, скорее всего, локальным сервером IIS. Попробуйте остановить IIS и посмотреть, или используйте другой порт. На Vista и выше вы можете использовать команду netsh , чтобы проверить, какие порты уже зарезервированы

Кстати, у вас есть метаданные http или mex конечные точки в файле app.config или web.config?

1 голос
/ 02 декабря 2010

У меня нормально работает следующее:

class Program
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        void Test();
    }

    public class MyService : IMyService
    {
        public void Test()
        {
            throw new NotImplementedException();
        }
    }

    static void Main()
    {
        var endpointAddress = new Uri("http://127.0.0.1:5555/MyService");
        using (var host = new ServiceHost(typeof(MyService), endpointAddress))
        {
            var basicHttpBinding = new BasicHttpBinding();
            host.AddServiceEndpoint(typeof(IMyService), basicHttpBinding, string.Empty);
            host.Open();
        }
    }
}

Может быть, у вас есть другой код, который мешает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...