У меня была такая же проблема, и при использовании net.pipe *: // localhost / serviceName * я решил ее, посмотрев на процесс самостоятельного размещения приложения.
То, как я это сделал, было с помощью служебного класса, вот код.
public static class ServiceLocator
{
public static bool IsWcfStarted()
{
Process[] ProcessList = Process.GetProcesses();
return ProcessList.Any(a => a.ProcessName.StartsWith("MyApplication.Service.Host", StringComparison.Ordinal));
}
public static void StartWcfHost()
{
string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var Process2 = new Process();
var Start2 = new ProcessStartInfo();
Start2.FileName = Path.Combine(path, "Service", "MyApplication.Service.Host.exe");
Process2.StartInfo = Start2;
Process2.Start();
}
}
сейчас мое приложение не называется MyApplication, но вы поняли мою точку зрения ...
Теперь в моих клиентских приложениях, которые используют хост, у меня есть этот вызов:
if (!ServiceLocator.IsWcfStarted())
{
WriteEventlog("First instance of WCF Client... starting WCF host.")
ServiceLocator.StartWcfHost();
int timeout=0;
while (!ServiceLocator.IsWcfStarted())
{
timeout++;
if(timeout> MAX_RETRY)
{
//show message that probably wcf host is not available, end the client
....
}
}
}
Это решило 2 вопроса,
1. Ошибки кода, которые у меня были устранены из-за состояния гонки, и 2
2. Я контролируемым образом знаю, произошел ли сбой в работе хоста из-за какой-либо проблемы или неправильной конфигурации.
Надеюсь, это поможет.
Walter