none
调用Wcf服务时候抛出异常:基础连接已经关闭: 连接被意外关闭 RRS feed

  • 问题

  • 服务端:
    [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            IList showFruits();
           
            [OperationContract]
            IList showBooks();
        }
    public class Service1 : IService1
        {
            
            public IList showFruits()
            {
                string[] fruits = { "apple", "passionfruit", "banana", "mango" };
                return fruits.ToList();
            }
            public IList showBooks()
            {
              IDictionary<string, string> listbooks = new Dictionary<string, string>();
                listbooks.Add("Bookid", "001");
                listbooks.Add("BookName", "ASP.net");
                listbooks.Add("BookPrice", "30");
                
                return listbooks.ToList();
            }
            
        }
    客户端
     ServiceReference1.Service1Client myService = new ServiceReference1.Service1Client();
            private void button1_Click(object sender, EventArgs e)
            {
                listBox1.DataSource = myService.showFruits();
                MessageBox.Show("done");
            }
            private void button2_Click(object sender, EventArgs e)
            {
                dataGridView1.DataSource= myService.showBooks();
                MessageBox.Show("done");
            }
    Result:
    showFruits()方法能被成功调用 并返回列表。
    而showBooks()则会提示“基础连接已经关闭: 连接被意外关闭”这个错误。请问是什么问题呢 有什么解决方法吗?
    2011年11月20日 4:01

答案

  •   public IList showFruits()
            {
                string[] fruits = { "apple", "passionfruit", "banana", "mango" };
                return fruits.ToList();
            }
            public IList showBooks()
            {
              IDictionary<string, string> listbooks = new Dictionary<string, string>();
                listbooks.Add("Bookid", "001");
                listbooks.Add("BookName", "ASP.net");
                listbooks.Add("BookPrice", "30");
                
                return listbooks.ToList();
            }

    返回值不要使用

    IList 类型,WCF里最好使用显示的类型定义,WCF序列化对于类继承机制支持是有限制的。作为服务接口,是没有继承的概念的。你还称数组或者别的类型应该就可以了。

    Frank Xu Lei--谦卑若愚,好学若饥
    老徐的网站】:http://www.frankxulei.com/

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

    Windows Azure中文技术论坛

    2011年11月21日 5:10
    版主

全部回复