2013-04-03 57 views
0

我有一段代碼導致異常。 該異常僅被拋出一次,該場景無法被複制。但我仍然想要理解這個錯誤。 以下是代碼:System.ServiceModel.ServiceHost.AddServiceEndpoint構造函數導致異常拋出

1 Dim myHost As System.ServiceModel.ServiceHost = New ServiceHost(New ClientService()) 
2 myBinding = New NetTcpBinding(SecurityMode.None) 
3 Dim clientAddress As String = "net.tcp://127.0.0.1:3500/Client" 
4 myHost.AddServiceEndpoint(GetType(IClientService), myBinding, clientAddress) 

IP地址僅用於舉例。在生產中,它是客戶機器的有效IP地址。 異常在#4行中引發。這裏是堆棧:

1 System.UriFormatException: Invalid URI: The hostname could not be parsed. 
2 at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) 
3 at System.Uri..ctor(String uriString, UriKind uriKind) 
4 at System.ServiceModel.ServiceHost.AddServiceEndpoint(Type implementedContract, Binding binding, String address, Uri listenUri) 
5 at System.ServiceModel.ServiceHost.AddServiceEndpoint(Type implementedContract, Binding binding, String address) 

問題:

  1. 爲什麼超載AddServiceEndpoint(類型implementedContract,有約束力,字符串地址,烏里listenUri)稱爲如果我只叫AddServiceEndpoint(類型implementedContract ,綁定綁定,字符串地址)

  2. 什麼可能是該異常的可能原因?

謝謝。

編輯:

爲clientAddress串的實際的代碼是:

clientAddress = String.Format(My.Resources.UrlTemplate,ip.AddressList(0).ToString(), CInt(Int((1024 - 808 + 1) * Rnd() + 808))) 

其中

Dim ip As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName()) 

我簡化了清晰度起見第一個代碼示例。 Resources.resx是生產代碼中的Embeded資源。

回答

2
  1. 還有的AddServiceEndpoint許多重載,這是常見的做法有一個過載該做的大部分工作,而另一些(通常)需要較少的參數,只需要調用更完整的過載 - 這是大家可以在堆棧跟蹤中看到。 AddServiceEndpoint(Type, Binding, String)內部呼叫AddServiceEndpoint(Type, Binding, String, Uri)

  2. 你說它不再生產,所以如果沒有實際的價值,很難猜測出現了什麼問題。根據例外情況,clientAddress的值肯定是錯誤的,但不知道導致這個問題的價值,我們只能猜測。例如,如果使用"net.tcp://"作爲該變量的值,則可以獲得相同的例外。

+0

謝謝@carlosfigueira。我只是認爲msdn文檔會包含這些信息。至於第二點 - 請參閱我最近編輯的帖子。再次感謝。 – myroslav 2013-04-04 14:01:20

相關問題