Я использую wcf для реализации распределенного приложения с использованием нескольких сервисов.
Одна из моих служб должна использовать привязку MSMQ, чтобы получать запросы асинхронно, чтобы запросы не игнорировались при отключении. Проблема с привязкой MSMQ заключается в том, что это только один путь, и поэтому у меня не может быть методов, возвращаемых в контракте.
Поэтому мне пришлось создать другую конечную точку с привязкой wshttp.
Теперь у меня есть проблема, которая может даже не быть связана со службами wcf.
Служба с привязкой msmq записывает в файл, который читается другой службой. Проблема в том, что когда первая служба вносит изменения в файл, я должен перезапустить обе, чтобы вторая прочитала эти изменения.
Я записываю информацию из файла, используя следующее:
string filename = "holder.txt";
if (!File.Exists(filename))
File.Create(filename);
Stream stream = File.Open(filename, FileMode.Create);
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, requests_list);
stream.Close();
Я закрываю поток, чтобы изменения, сделанные другими службами, не просматривались при его чтении? с помощью:
string filename = "holder.txt";
if (!File.Exists(filename))
return null;
Requests requests_list;
Stream stream = File.Open(filename, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
try
{
requests_list = (Requests)bFormatter.Deserialize(stream);
}
catch (Exception)
{
stream.Close();
return null;
}
stream.Close();
return requests_list;
Кстати, оба метода находятся в классе, совместно используемом обеими службами.
Заранее спасибо