2011-11-01 101 views
4

我很抱歉太過於模糊,如果您需要任何精度,我會盡我所能給它。WCF:PlatformNotSupportedException當運行服務器項目

我整理了2個不同的WCF「代碼項目」示例應用程序,並且我得到以下異常無論一個我啓動,所以我想,這正是我的機器上一些錯誤配置:

編輯
我嘗試在不同的機器上(相同的操作系統,贏得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 

    } 


詳情:
演示應用程序是herehere和刪除上述
描述爲表示here但是這並沒有解決我的問題,這可能是一個UAC的問題相同的異常。
操作系統是Windows 7 x64

在此先感謝。

+0

您是否擁有Windows Communication Foundation HTTP/Non-HTTP Activation窗口功能?這些選項位於控制面板 - >程序和功能 - >打開或關閉Windows功能 - > Microsoft .NET Framework 3.x(剛剛意識到您的示例是.NET 3.5而不是.NET 4) – SliverNinja

回答

0

我不知道到底發生了什麼,爲什麼恰恰, 但註釋以下行,並且不添加metadataBehavior到 host.Description.Behaviors修復概率:

host.Description.Behaviors.Add(metadataBehavior); 

我不真的不需要這個功能,所以它可以擠壓它,但我仍然想知道爲什麼這會導致例外......(特別是那是在我的合作伙伴的工作站上工作,所以我確信它必須與「某些設置某處「

在其他項目上評論完全相同類型的行使它們也可以工作,所以毫無疑問就剩下了。

2

這是當您無權在給定地址創建服務主機時獲得的消息。在你的情況下,你正在使用NetTcpBinding。這裏有一些可能的解決方案 - 你只需要貫穿它們。

  1. 另一個進程正在使用相同的結合 - TCP端口8000(IIS?)
  2. 您沒有運行VS.NET作爲管理員
  3. Windows進程激活服務(WAS)未安裝(Windows功能需要net.tcp綁定)
  4. 未安裝Windows Communication Foundation HTTP/Non-HTPP激活(在.NET Framework 3.x下的窗口功能)
  5. 防火牆阻止成功的Net.Tcp通信。
+0

謝謝。 1 \我使用TCPView/netstat來監視端口使用情況,並且端口8000是免費的。當一個端口已經被監聽時,我得到另一個異常(更明確)。 2 \我正在運行VS作爲管理員+我在VS外部發布了exe文件,結果如同admin,結果相同 –

+0

@SilverNinja:將127.0.0.1更改爲我的真實IP導致出現以下錯誤「請求的地址在其上下文中無效」以及yes metadataBehavior爲空 –

+0

您有網絡激活服務嗎?請參閱http://stackoverflow.com/questions/3561286/wcf-tcp-binding-the-requested-address-is-not-valid-in-its-context-error – SliverNinja

0

1->打開SQL Server

2->右鍵單擊數據庫,並選擇屬性

3->點擊選項(左圖)數據庫收集的變化選擇complated Latin1_General_CI_AI

使命。

相關問題