none
通信对象 System.ServiceModel.ServiceHost 无法用于通信,因为其处于“出错”状态。 RRS feed

  • 问题

  • 一个小小的wcf实例,报出这样的错误信息:

    通信对象 System.ServiceModel.ServiceHost 无法用于通信,因为其处于“出错”状态。

    /////////// interfact contract////////////////////////
    using System;
    using System.ServiceModel;
    using System.Text;
    
    namespace DataObjLibraryContract
    {
      [ServiceContract]//(Name="IDataObjManangerContract",Namespace="www.msdn.com")]
      public interface IDataObj
      {
        [OperationContract]//(Name = "HelloModth", Action = "www.msdn.com/IDataObjManangerContract", ReplyAction = "www.msdn.com/HelloModth")]
        string Hello();
      }
    }
    //end 
    //////////////////////
    
    using System;
    using System.ServiceModel;
    
    using DataObjLibraryContract;
    
    namespace DataObjLibrarySpace
    {
      public class DataOjb : IDataObj
      {
        #region IDataObj 成员
    
        public string Hello()
        {
          return string.Format("Hello Wrold access Date {0}", DateTime.Now);
        }
    
        #endregion
      }
    }
    ////////////////////////end
    
    
    ///////////////////host
    
    try
          {
            using (ServiceHost host = new ServiceHost(typeof(DataOjb)))
            {
              host.Open();
              this.toolStripStatusLabel1.Text = "wcf services start aucceed !";
    
            }
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.Message);
            this.toolStripStatusLabel1.Text = "wcf services start fail !";
          }
    
    
    /////////////app.config/////////////
    
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <system.serviceModel>
      <services>
       <service name="DataObjLibrarySpace.DataObj" behaviorConfiguration="">
        <endpoint address="Hello" contract="DataObjLibraryContract.IDataObj" binding="basicHttpBinding"/>
        <host>
         <baseAddresses>
          <add baseAddress="http://localhost:8400"/>
         </baseAddresses>
        </host>
       </service>
      </services>
    
      
     </system.serviceModel>
    </configuration>
    
    
    
    
    


    2011年6月25日 2:28

答案

  • using (ServiceHost host = new ServiceHost(typeof(DataOjb)))
            {
              host.Open();
              this.toolStripStatusLabel1.Text = "wcf services start aucceed !";

            }
    这句代码修改一下,如果你这事Winform或者Console托管,这句话执行完毕后,host 实例就会被回收。

    加个Consol.Read();

    using (ServiceHost host = new ServiceHost(typeof(DataOjb)))
    {
    host.Open();
    this.toolStripStatusLabel1.Text = "wcf services start aucceed !";
    Consol.Read();
            }
    否则服务端没有任何宿主实例处于运行状态


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    • 已标记为答案 server126 2011年6月25日 3:35
    • 取消答案标记 server126 2011年6月25日 3:35
    • 已标记为答案 server126 2011年6月25日 3:42
    2011年6月25日 3:25
    版主

全部回复

  • using (ServiceHost host = new ServiceHost(typeof(DataOjb)))
            {
              host.Open();
              this.toolStripStatusLabel1.Text = "wcf services start aucceed !";

            }
    这句代码修改一下,如果你这事Winform或者Console托管,这句话执行完毕后,host 实例就会被回收。

    加个Consol.Read();

    using (ServiceHost host = new ServiceHost(typeof(DataOjb)))
    {
    host.Open();
    this.toolStripStatusLabel1.Text = "wcf services start aucceed !";
    Consol.Read();
            }
    否则服务端没有任何宿主实例处于运行状态


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    • 已标记为答案 server126 2011年6月25日 3:35
    • 取消答案标记 server126 2011年6月25日 3:35
    • 已标记为答案 server126 2011年6月25日 3:42
    2011年6月25日 3:25
    版主
  • 谢谢您的回答,我是winform程序。

    我已经按您说的解决了此问题。

    再次谢谢您。

    2011年6月25日 3:35
  • 你好,我也遇到你这个问题,我按照上面说的方式做了。还是没有解决这个问题。请问你怎么解决的了?我的也是winform程序。谢谢。
    2011年7月19日 5:02