I want to share DLLs that I made between different exe's. Every file is in the same map. But how can I make a change to my data from one exe to a dll and also see the change in another dll?
On internet it looks like I need to use a WCF Service. But what I do is just local, so I was wondering is their no other way?
If there is no other way, I have also a problem with my WCF Service, I get the following error:
The type Newtonsoft.Json.Linq.JToken is a recursive data collection contract. This is not supported. To work around this problem by changing the definition of the collection Newtonsoft.Json.Linq.JToken so that it contains no references to himself.
And beneed is my code:
//SERVER SIDE
internal class CommunicationService
{
#region Fields
private ServiceHost _service_host;
private static CommunicationService _instance;
#endregion
#region Init
internal static CommunicationService Instance
{
get
{
if (_instance == null)
{
_instance = new CommunicationService();
}
return _instance;
}
}
private CommunicationService()
{
string address = string.Format("http://127.0.0.1:{0}", RegSettings.Instance.Port);
_service_host = new ServiceHost(typeof(NGX3WCFService.Interfaces.NGX3Service), new Uri(address));
BasicHttpBinding basic_http_binding = new BasicHttpBinding();
Uri uri_address = new Uri(address);
ServiceMetadataBehavior service_metadata_behavior = _service_host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (service_metadata_behavior == null)
{
service_metadata_behavior = new ServiceMetadataBehavior();
_service_host.Description.Behaviors.Add(service_metadata_behavior);
}
service_metadata_behavior.HttpGetEnabled = true;
service_metadata_behavior.HttpGetUrl = new Uri(string.Format("{0}/ngx3wsd", address));
_service_host.AddServiceEndpoint(typeof(INGX3Service), basic_http_binding, string.Format("{0}/ngx3", address));
}
#endregion
#region StartStop
internal void Start()
{
_service_host.UnknownMessageReceived += _service_host_UnknownMessageReceived;
_service_host.Open();
}
internal void Stop()
{
_service_host.Close();
_service_host.UnknownMessageReceived -= _service_host_UnknownMessageReceived;
}
private void _service_host_UnknownMessageReceived(object sender, UnknownMessageReceivedEventArgs e)
{
LogFile.Instance().Append(e.Message.ToString());
}
#endregion
}
//INTERFACE
[ServiceContract]
public interface INGX3Service
{
[OperationContract]
bool ValidateConnection();
[OperationContract]
Dictionary<string, JToken> GetCustomerPrinterScanInfo();
[OperationContract]
Dictionary<string, JToken> GetCustomerPrinterReadInfo();
[OperationContract]
Dictionary<string, List<SNMPVariable>> GetCustomerPrinterFetchInfo();
[OperationContract]
Dictionary<string, JToken> GetCustomerPrinterSpoolerInfo();
[OperationContract]
void SetCustomerPrinterReadInfo(string id, JToken data);
[OperationContract]
void SetCustomerPrinterFetchInfo(string id, List<SNMPVariable> data);
[OperationContract]
void SetCustomerPrinterSpoolerInfo(string id, JToken data);
[OperationContract]
void UpdateJsonSettings(JToken data);
[OperationContract]
RegSettings GetRegSettings();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class NGX3Service : INGX3Service
{
#region Validate
public bool ValidateConnection()
{
return true;
}
#endregion
#region CustomerPrinterInfo
public Dictionary<string, JToken> GetCustomerPrinterScanInfo()
{
Dictionary<string, JToken> data = new Dictionary<string, JToken>();
foreach (Subnet subnet in NetworkController.Instance.Subnets)
{
foreach (Host host in subnet.Hosts)
{
if (!string.IsNullOrEmpty(host.Id) && host.Id.Length == 40 && host.Protocol == NetworkEngine.Enumerations.Protocol.SNMP && host.DeviceType == NetworkEngine.Enumerations.DeviceType.Printer && !data.ContainsKey(host.Id))
{
data[host.Id] = host.ReadScanData();
}
}
}
return data;
}
public Dictionary<string, JToken> GetCustomerPrinterReadInfo()
{
Dictionary<string, JToken> data = new Dictionary<string, JToken>();
foreach (Subnet subnet in NetworkController.Instance.Subnets)
{
foreach (Host host in subnet.Hosts)
{
if (!string.IsNullOrEmpty(host.Id) && host.Id.Length == 40 && host.Protocol == NetworkEngine.Enumerations.Protocol.SNMP && host.DeviceType == NetworkEngine.Enumerations.DeviceType.Printer && !data.ContainsKey(host.Id))
{
data[host.Id] = host.ReadInfo();
}
}
}
return data;
}
public Dictionary<string, List<SNMPVariable>> GetCustomerPrinterFetchInfo()
{
Dictionary<string, List<SNMPVariable>> data = new Dictionary<string, List<SNMPVariable>>();
foreach (Subnet subnet in NetworkController.Instance.Subnets)
{
foreach (Host host in subnet.Hosts)
{
if (!string.IsNullOrEmpty(host.Id) && host.Id.Length == 40 && host.Protocol == NetworkEngine.Enumerations.Protocol.SNMP && host.DeviceType == NetworkEngine.Enumerations.DeviceType.Printer && !data.ContainsKey(host.Id))
{
data[host.Id] = host.ReadFetchData();
}
}
}
return data;
}
public Dictionary<string, JToken> GetCustomerPrinterSpoolerInfo()
{
Dictionary<string, JToken> data = new Dictionary<string, JToken>();
foreach (Printer printer in PrintSpooler.Instance.Printers)
{
if (printer.Id != null && printer.Id.Length == 40)
{
JObject jobject = new JObject();
jobject.Add("customer_printer_id", printer.Id);
jobject.Add("printer_info", JsonFile.Instance("printer_info", printer.Id).Read<JToken>());
jobject.Add("job_info", printer.ReadJobs());
data.Add(printer.Id, jobject);
}
}
return data;
}
public void SetCustomerPrinterReadInfo(string id, JToken data)
{
foreach (Subnet subnet in NetworkController.Instance.Subnets)
{
Host host = subnet.Hosts.FirstOrDefault(h => h.Id.Equals(id));
if (host != null)
{
host.WriteInfo(data);
}
}
}
public void SetCustomerPrinterFetchInfo(string id, List<SNMPVariable> data)
{
foreach (Subnet subnet in NetworkController.Instance.Subnets)
{
Host host = subnet.Hosts.FirstOrDefault(h => h.Id.Equals(id));
if (host != null)
{
host.WriteFetchInfo(data);
}
}
}
public void SetCustomerPrinterSpoolerInfo(string id, JToken data)
{
Printer printer = PrintSpooler.Instance.Printers.FirstOrDefault(p => p.Id.Equals(id));
if (printer != null)
{
printer.WriteJobs(data["job_info"]);
}
}
#endregion
#region Settings
public void UpdateJsonSettings(JToken data)
{
JsonSettings.Instance.Load(data);
}
public RegSettings GetRegSettings()
{
return RegSettings.Instance;
}
#endregion
}
Aucun commentaire:
Enregistrer un commentaire