自分のホストするWCFサービスがリッスンするポート番号を変更しようとしています。このために、ServiceHostを停止し、新しいポートで新しいServiceEndpointを追加してから、ServiceHostを再起動しました。しかし、これはうまくいかず、この例外がスローされます。ServiceHostに登録されているNetTcpBinding ServiceEndpointのポート番号を変更する方法
System.InvalidOperationException:ServiceHostがオープン/フォルト/アボート/クローズされた後にエンドポイントを追加できません。ここで
私のテストコードです:
[Fact]
public async Task IsRunning_ForServerRunning_IsTrue()
{
server.Close();
var newPortNumber = 6767;
server.Open(newPortNumber);
Assert.True(server.IsRunning);
}
、これはAutomationServer
です:
public class AutomationServer : IAutomationServer
{
private ServiceHost svh;
private IAutomationService service;
public AutomationServer(IAutomationService service)
{
svh = new ServiceHost(service);
}
public void Open(int port = 0)
{
Open(port, null);
}
public void Open(int port, string host)
{
//if (port != 0)
this.port = port;
if (host == null)
host = Dns.GetHostEntry("").HostName;
var baseUri = new Uri("net.tcp://" + host + ":" + this.port);
Open(baseUri);
}
public void Open(Uri baseUriAddress)
{
var serviceEndpoint = svh.AddServiceEndpoint(
typeof(IAutomationService),
new NetTcpBinding(),
baseUriAddress);
if (baseUriAddress.Port == 0)
AutoAssignPortNumber(ref serviceEndpoint);
svh.Open();
IsRunning = true;
}
private void AutoAssignPortNumber(ref ServiceEndpoint serviceEndpoint)
{
serviceEndpoint.ListenUriMode = ListenUriMode.Unique;
}
public void Close()
{
svh.Close();
IsRunning = false;
}
... properties, etc.
}
だから昔のServiceHostを "廃棄" として新しいのServiceHostを作成するための正しい方法ですServiceEndpointの新しいバインディング、または何か不足していますか?