我想分享我在不同的exe之间创建的DLL。每个文件都在相同的地图中。但是,如何才能将数据从一个exe文件更改为dll文件,并查看另一个dll文件中的更改?C#在不同的exe之间共享不同的DLL
在互联网上它看起来像我需要使用WCF服务。但我所做的只是本地的,所以我想知道他们没有其他办法吗?
如果没有别的办法,我也有一个问题,我的WCF服务,我得到以下错误:
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.
而且beneed是我的代码:
//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
}
这是两个问题。在进程之间共享数据可以通过各种方式完成 - 中间件,陷入潜在的混乱与锁等,并有公共共享的可变数据。把它放在数据库中,让它处理协调......这是基于意见的。第二个问题似乎更具体 - 但我需要更多的细节才能够回答。 – doctorlove