我创建了一个名为AddServiceLibrary的类库,其中我有一个名为AssemblyLoader的方法,代码如下:
string executingAssemblyName = Application.ExecutablePath;
AssemblyName asmName = AssemblyName.GetAssemblyName(executingAssemblyName);
AppDomain appDomain = AppDomain.CurrentDomain;
Assembly assembly = appDomain.Load(asmName);
_assemblyTypes = assembly.GetTypes().ToList();
LoadAppConfig();
Run Code Online (Sandbox Code Playgroud)
此方法在当前appdomain中加载执行程序集.我有另一种叫做LoadAppConfig()的方法
ServicesSection serviceSection = ConfigurationManager.GetSection("system.serviceModel/services") as ServicesSection;
ServiceElementCollection sereleColl = serviceSection.Services;
string endPointAddress = string.Empty ;
foreach (var ele in sereleColl)
{
_serviceType = GetServiceType((System.ServiceModel.Configuration.ServiceElement)(ele)).Name);
break;
}
ServiceHoster.HostService(_serviceType);
Run Code Online (Sandbox Code Playgroud)
此方法读取app.config文件并查找wcf服务的类型.我有一个类ServiceHoster我有一个方法HostService:
public static void HostService(Type serviceType)
{
using (ServiceHost host = new ServiceHost(serviceType))
{
host.Open();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我有一个名为MyWCFService的不同项目,我在这个项目中添加AddServiceLibrary的引用并调用该方法;
AddServiceLibrary.LoadLibrary lb = new AddServiceLibrary.LoadLibrary();
lb.AssemblyLoader();
Run Code Online (Sandbox Code Playgroud)
我希望在这一点上我的服务是正确托管的,但是当我想在我的客户端项目中使用AddServiceReference时,它告诉我,由于目标机器主动拒绝它,因此 无法建立连接. 如果我不使用我的AddServiceLibrary,那么它是找到服务并且工作正常.请任何人看看它,并建议我的方法可能是错的.
打开它时,您正在处置ServiceHost实例.取下使用块,分别处理该主机.
您的设计决定使用静态ServiceHoster可能是一个问题.无论通过实例化ServiceHost实例来托管服务,都需要管理此实例的生命及其处置.