WCF: PlatformNotSupportedException при запуске серверных проектов - PullRequest
4 голосов
/ 01 ноября 2011

Я заранее прошу прощения за то, что был слишком расплывчатым, если вам нужна какая-то точность, я приложу все усилия, чтобы дать это.

Я скомпилировал 2 разных примера приложений WCF "Code Project" и получаю следующееисключение, независимо от того, что я запускаю, поэтому я предполагаю, что что-то неправильно настроено на моей машине:

РЕДАКТИРОВАТЬ
Я пробовал на другой машине (та же ОС,win 7 64) и все работает нормально.
Я просто не могу понять, какая конфигурация неверна или отсутствует на моем компьютере.

{"Operation is not supported on this platform."}
at System.Net.HttpListener..ctor()
at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener)
at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback)
at System.ServiceModel.Channels.HttpChannelListener.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at WCFService.MainForm.startWCFServer() in D:\xxx\MainForm.cs:line 77

Ниже приведен код.Ничего необычного, простые вещи WCF, я думаю.

    private ServiceHost host = null;

    public void startWCFServer()
    {
            // Create the url that is needed to specify where the service should be tarted
            urlService = "net.tcp://" + "127.0.0.1" + ":8000/MyService";

            // Instruct the ServiceHost that the type that is used is a ServiceLibrary.service1
            host = new ServiceHost(typeof(ServiceLibrary.service1));
            host.Opening += new EventHandler(host_Opening);
            host.Opened += new EventHandler(host_Opened);
            host.Closing += new EventHandler(host_Closing);
            host.Closed += new EventHandler(host_Closed);

            // The binding is where we can choose what transport layer we want to use. HTTP, TCP ect.
            NetTcpBinding tcpBinding = new NetTcpBinding();
            tcpBinding.TransactionFlow = false;
            tcpBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
            tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
            tcpBinding.Security.Mode = SecurityMode.None; // <- Very crucial

            // Add endpoint
            host.AddServiceEndpoint(typeof(ServiceLibrary.IService1), tcpBinding, urlService);

            // A channel to describe the service. Used with the proxy scvutil.exe tool
            ServiceMetadataBehavior metadataBehavior;
            metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
            if (metadataBehavior == null)
            {
                // This is how I create the proxy object that is generated via the svcutil.exe tool
                metadataBehavior = new ServiceMetadataBehavior();
                //metadataBehavior.HttpGetUrl = new Uri("http://" + _ipAddress.ToString() + ":8001/MyService");
                metadataBehavior.HttpGetUrl = new Uri("http://" + "127.0.0.1" + ":8001/MyService");
                metadataBehavior.HttpGetEnabled = true;
                metadataBehavior.ToString();
                host.Description.Behaviors.Add(metadataBehavior);
                urlMeta = metadataBehavior.HttpGetUrl.ToString();
            }

            host.Open(); // <---- EXCEPTION BLOWS HERE

    }


ДЕТАЛИ:
Демонстрационные приложения здесь и здесь и исключение того же исключения, описанного выше
Это может быть проблема с UAC, как указано здесь Но это не решило мою проблему.
ОС - Windows 7 x64

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 01 ноября 2011

Это сообщение вы получаете, когда вы не авторизованы для создания хоста сервиса по указанному адресу. В вашем случае вы получаете это с помощью NetTcpBinding. Вот несколько возможных решений этой проблемы - вам просто нужно пробежаться по ним.

  1. Другой процесс использует ту же привязку - TCP-порт 8000 (IIS?)
  2. Вы не используете VS.NET как администратор
  3. Служба активации процессов Windows (WAS) не установлена ​​(для привязки net.tcp требуется функция Windows)
  4. Windows Communication Foundation HTTP / Non-HTPP Активация не установлена ​​(функция Windows в .NET Framework 3.x)
  5. Брандмауэр блокирует успешное соединение Net.Tcp.
0 голосов
/ 04 декабря 2015

1-> Откройте SQL Server

2-> щелкните правой кнопкой мыши базу данных и выберите свойства

3-> Параметры щелчка (левая панель), перейдите в коллекцию базы данных и выберите Latin1_General_CI_AI

миссия выполнена.

0 голосов
/ 10 февраля 2012

Согласно этому: http://social.msdn.microsoft.com/forums/en-US/wcf/thread/b67d03d9-e2e6-40e6-aa44-2af6ce5a8a38/ проблема в том, что привязка метаданных не http, и поэтому брандмауэр блокирует ее.

0 голосов
/ 01 ноября 2011

Я не знаю точно, что происходит и почему именно, но комментируя следующую строку и не добавляя metadataBehavior к host.Description.Behaviors исправляет ошибку:

  host.Description.Behaviors.Add(metadataBehavior);

Мне на самом деле не нужна эта функция, поэтому можно сжимать ее, но я все еще удивляюсь, почему это вызвало исключение ... (Особенно это касается рабочей станции моего партнера, поэтому я уверен, что она должна с «где-то настройка» )

Комментирование точно такой же строки в других проектах заставляет их работать, поэтому сомнений не остается.

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