例外の原因となったコードがあります。例外がスローされたのは 1 回だけであり、シナリオを複製することはできません。しかし、私はまだこのエラーを理解したいと思っています。コードは次のとおりです。
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)
質問:
AddServiceEndpoint(Type implementedContract, Binding binding, String address)のみを呼び出した場合に、オーバーロードされた AddServiceEndpoint(Type implementedContract, Binding binding, String address, Uri listenUri)が呼び出されるのはなぜですか?
その例外の考えられる原因は何ですか?
ありがとうございました。
編集:
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 は、運用コードの埋め込みリソースです。