我创建了一个名为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();
此方法在当前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);
此方法读取app.config文件并查找wcf服务的类型。 我还有一个ServiceHoster类,我有一个方法HostService:
public static void HostService(Type serviceType)
{
using (ServiceHost host = new ServiceHost(serviceType))
{
host.Open();
}
}
现在,我有一个名为MyWCFService的不同项目,我在这个项目中添加AddServiceLibrary的引用并调用该方法;
AddServiceLibrary.LoadLibrary lb = new AddServiceLibrary.LoadLibrary();
lb.AssemblyLoader();
我希望此时我的服务是正确托管的,但是当我想在我的客户端项目中使用AddServiceReference时,它告诉我的是 无法建立连接,因为目标计算机在中主动拒绝了它 如果我不使用我的AddServiceLibrary,它会找到服务并正常工作。 请任何人看看它,并告诉我在我的方法中可能出现的问题。
答案 0 :(得分:5)
您在打开ServiceHost实例后立即将其丢弃。取下使用块,并单独处理该主机。
您的设计决定使用静态ServiceHoster可能是一个问题。无论通过实例化ServiceHost实例来托管服务,都需要管理此实例的生命及其处理。