语境:
我需要开发一个监视服务器来监视我们的一些应用程序(这些应用程序在c#中).所以我决定使用WCF开发系统,这似乎适合我的需求.
这些应用程序在启动时必须将自己注册到监视服务器.之后,监视服务器可以调用这些应用程序的Start或Stop方法.
一切都在同一台机器上完全执行,无需远程执行任何操作.
所以我开发了一个很好的原型,一切正常.每个应用程序将自己注册到监视服务器.
题:
ApplicationRegistrationService
(请参阅下面的代码)是监视服务的实现,由于ServiceBehavior
属性,它是一个单例实例.
这是我的问题:我想访问ApplicationRegistrationService
每个示例的内容,从我的服务器(ConsoleMonitoringServer
在示例中)连接的应用程序的数量.但是,我不知道如何实现这一目标.
我是否需要在我的服务器中创建一个通道,就像我在客户端(ConsoleClient
)中所做的那样,或者它是否有更好的方法来实现这一目标?
码:
出于此问题的目的,代码非常简化:
//The callback contract interface
public interface IApplicationAction
{
[OperationContract(IsOneWay = true)]
void Stop();
[OperationContract(IsOneWay = true)]
void Start();
}
[ServiceContract(SessionMode = SessionMode.Required,
CallbackContract = typeof(IApplicationAction))]
public interface IApplicationRegistration
{
[OperationContract]
void Register(Guid guid, string name);
[OperationContract]
void Unregister(Guid guid);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
public class ApplicationRegistrationService : IApplicationRegistration
{
//IApplicationRegistration Implementation
}
public class ApplicationAction : IApplicationAction …
Run Code Online (Sandbox Code Playgroud) 所以,我正在尝试创建一个合并模块,我有多个wxs文件.我认为一切都很好,因为我的项目的构建成功了.后来,我意识到其中一个辅助wxs文件的Source属性中使用的路径是完全错误的,但编译器没有给出以下错误:
系统找不到文件'..\..\release_area\WrongPath\Component2.dll'.
在辅助wxs文件中,我添加了一个DirectoryRef元素,引用主wxs文件中的文件夹AssemblyFolder来创建两个文件之间的引用.
主wxs文件:
<Module Id="MyModule" Language="1033" Version="1.0.0.0">
<Package InstallerVersion="200" Platform="x86"/>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="AssemblyFolder">
<Component Id="Component1.dll">
<File Id="Component1.dll" Name="Component1.dll"
KeyPath="yes" Assembly=".net"
Source="..\..\release_area\Comp\Component1.dll" />
</Component>
</Directory>
</Directory>
</Module>
Run Code Online (Sandbox Code Playgroud)
辅助wxs文件:
<Fragment>
<DirectoryRef Id="AssemblyFolder">
<Component Id="Component2.dll">
<File Id="Component2.dll" Name="Component2.dll"
KeyPath="yes" Assembly=".net"
Source="..\..\release_area\WrongPath\Component2.dll" />
</Component>
</DirectoryRef>
</Fragment>
Run Code Online (Sandbox Code Playgroud)
只是为了澄清:为了测试,我<Component Id="Component2.dll">
直接在主wxs中复制了我并得到错误:系统找不到文件'..\..\release_area\WrongPath\Component2.dll'.
所以,我的猜测是辅助wxs文件和主wxs文件之间的引用是完全错误的,这就是为什么编译器不验证文件路径但我无法弄清楚问题是什么.
这应该是一个相当容易的任务,但是我有点难过,我有一个LookUpEdit控件,我已将它数据绑定到数据源并正确设置了displaymember和ValueMenber.
此控件现在正确填充.
我的问题是通常我会提取一些数据,然后将其"设置"为ID,例如:
LookUpEdit.EditValue = [我的数据库中的一些ID]
但是在这种特殊情况下,我无权访问ID但我可以访问displymember值(来自数据库),那么如何仅在给定displaymember值的情况下设置LookUpEdit控件呢?
我需要定义一个带有内部集合对象的类,以通过字符串键来保存不同类型的值(例如string,int,float,DateTime和bool).我可以使用Hashtable,因为它不是强类型集合类,而Dictionary用于强类型项(尽管我可以使用对象作为Dictionary).
这是我想要定义我的类及其用法的情况:
public class MyBaseClass<D> {
protected Hashtable ht = new Hashtable();
MyClass public SetValue<T>(string key, T value)
{
ht.Add(key, value);
return this;
}
public abstract D GetObject();
}
// Example of using the base class for data as class Data1
public MyClass<Data1> : MyBaseClass<Data1> {
public Data1 GetObject() {
return new Data1 {
Property1 = ht["key1"] as string,
Property2 = Int.Parse(ht["key2"].ToString())
}
}
Run Code Online (Sandbox Code Playgroud)
以上示例,我不确定在MyBaseClass中保存数据的最佳集合是什么?我读了一些关于Hashtable的文章.它是一个过时的集合,与Dictionary集合相比性能要慢得多.我应该使用.Net 3.5中的Dictionary或任何其他可用的集合吗?
我写下面的代码来删除文件:
FileInfo file = new FileInfo(filename);
file.Delete(Path);
Run Code Online (Sandbox Code Playgroud)
但我收到file.Delete(路径)需要1个参数的错误请帮助我
c# ×3
asp.net ×2
.net ×1
collections ×1
combobox ×1
data-binding ×1
devexpress ×1
dictionary ×1
merge-module ×1
wcf ×1
wix ×1
wix3 ×1