我使用WCF服务。
它工作正常,如果我使用禁用的IP,它会向我显示一条消息。 但是,如果我将文本框中的IP更改为正确的IP,它将再次捕获TCP异常,使用OLD IP ...文本框中的IP字符串是正确的,所有变量都包含正确的IP ...
例外:
CommunicationException TCP-Fehler (10049:Die angeforderte Adresse ist 在diesemKontextungültig)beim 劳森上午 IP-Endpunkt = 192.168.178的 2 :。7997
应为192.168.178。 25 在纠正文本框中的IP并重新启动服务器后,我得到了与旧IP相同的异常......
这是我的方法: 我在这个方法中创建了所有新的资源。 只有ServiceHost主机;变量存储在方法之外,我尝试在开始之前或异常之后将其设置为null。
配置主机:
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");
启动主机(例外):
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;
}
}
}
答案 0 :(得分:0)
我预感到可能存在与HTTP绑定的通道运行时基础结构相关联的静态状态,这维护了由服务Uri键入的HTTP侦听器的详细信息。如果您没有正确拆除使用Open的ServiceHost实例,则旧的详细信息可能仍会在此静态状态下注册。
调用host.Open()
后,您的catch块会发生什么?如果您没有在打开Open的实例上调用host.Abort()
和host.Dispose()
,则可能是问题所在。