无法建立连接,因为目标计算机在WCF中主动拒绝它

时间:2009-07-09 11:04:59

标签: wcf

我创建了一个名为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,它会找到服务并正常工作。 请任何人看看它,并告诉我在我的方法中可能出现的问题。

1 个答案:

答案 0 :(得分:5)

您在打开ServiceHost实例后立即将其丢弃。取下使用块,并单独处理该主机。

您的设计决定使用静态ServiceHoster可能是一个问题。无论通过实例化ServiceHost实例来托管服务,都需要管理此实例的生命及其处理。