Ich benutze einen WCF-Service.WCF: ServiceHost Problem (zwischengespeicherte Adressen?)
Es funktioniert gut, und wenn ich eine verbotene IP verwende, zeigt es mir eine Nachricht. Aber wenn ich die IP in meinem Textfeld auf die richtige IP ändern, wird es wieder die TCP-Ausnahme fangen, mit der OLD IP ... Die IP-Zeichenfolge in der Textbox ist die richtige und alle Variablen enthält die richtige IP .. .
Die Ausnahme:
Communication TCP-Fehler (10049: Die angeforderte Adresse ist in diesem Kontext ungültig) beim Lauschen am IP-Endpunkt = 192.168.178. : 7997.
Sollte 192.168.178 sein. und nach der IP in der Textbox zu korrigieren und dem Neustart des Servers i die gleiche Ausnahme mit der alten IP bekommen ...
Hier ist meine Methode: schaffe ich alle Ressourcen neu in dieser Methode. Nur der ServiceHost-Host; Die Variable wird außerhalb der Methode gespeichert und ich habe versucht, sie vor dem Start oder nach der Ausnahme auf Null zu setzen.
Configure Host:
private void MenuItemServerStart_Click(object sender, RoutedEventArgs e)
{
**[ omitted ]**
//Define base addresses so all
//endPoints can go under it
Uri tcpAdrs = new Uri("net.tcp://" +
textBoxLocalIP.Text.ToString() + ":" +
textBoxPort.Text.ToString() + "/WPFHost/");
Uri httpAdrs = new Uri("http://" +
textBoxLocalIP.Text.ToString() + ":" +
(int.Parse(textBoxPort.Text.ToString()) + 1).ToString() +
"/WPFHost/");
Uri[] baseAdresses = { tcpAdrs, httpAdrs };
try
{
host = new ServiceHost(typeof(ChatService.ChatService), baseAdresses);
}
catch (TargetInvocationException ex)
{
if (ex.InnerException != null)
{
**[ omitted ]**
}
return;
}
catch (Exception)
{
**[ omitted ]**
}
NetTcpBinding tcpBinding = new NetTcpBinding(SecurityMode.None, true);
//Updated: to enable file transefer of 64 MB
tcpBinding.MaxBufferPoolSize = (int)67108864;
tcpBinding.MaxBufferSize = 67108864;
tcpBinding.MaxReceivedMessageSize = (int)67108864;
tcpBinding.TransferMode = TransferMode.Buffered;
tcpBinding.ReaderQuotas.MaxArrayLength = 67108864;
tcpBinding.ReaderQuotas.MaxBytesPerRead = 67108864;
tcpBinding.ReaderQuotas.MaxStringContentLength = 67108864;
tcpBinding.MaxConnections = 100;
**[ omitted ]**
host.AddServiceEndpoint(typeof(ChatService.IChatService),
tcpBinding, "tcp");
//Define Metadata endPoint, So we can
//publish information about the service
ServiceMetadataBehavior mBehave =
new ServiceMetadataBehavior();
host.Description.Behaviors.Add(mBehave);
host.AddServiceEndpoint(typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexTcpBinding(),
"net.tcp://" + textBoxLocalIP.Text.ToString() + ":" +
(int.Parse(textBoxPort.Text.ToString()) - 1).ToString() +
"/WPFHost/mex");
Starten Host (Exception):
try
{
**host.Open();** **//Exception here !!!**
}
catch (Exception ex)
{
**[ omitted ]**
}
finally
{
if (host.State == CommunicationState.Opened)
{
((StatusBarItem)statusBar1.Items.GetItemAt(0)).Content = "Gestartet";
MenuItemServerStop.IsEnabled = true;
}
}
}
Es gibt eine Menge Code hier zu lesen - es wäre toll, wenn Sie das Problem isolieren könnten, so dass Sie nur 5-20 Zeilen Code schreiben müssen. Warum machst du auch 'Text.ToString()'? Text ist eine Zeichenfolge. –
Im ersten Codeblock mache ich Konfigurations-Sachen und im zweiten öffne ich die Host-Verbindung. Da bekomme ich die Ausnahme. Ich kenne es eine Menge Code, aber ich weiß nicht, ob ich in der Konfiguration Fehler gemacht habe. host.open() gibt die Exception aus, aber die IP in der Exceptionnachricht ist alt. Aber ich erschaffe immer einen neuen Host und andere Objekte. – user437899
@ user437899: Haben Sie nach dem Zuweisen von 'host = new ServiceHost' einen Fehler behoben und sehen Sie, ob die IP tatsächlich konfiguriert wurde? Oder vielleicht sprang der Uri davon ab, dass ihm ein Textfeld zugewiesen wurde? –