none
刚刚学WCF,碰到的问题 RRS feed

  • 问题

  • 在看《学习WCF 从原理到实践这本书》
    这本书第21页的例子我打出来后,运行报错,不知道为什么..
    麻烦帮我看下..

    一个名为ServiceFromScratch的解决方案中有三个项目,分别为HelloIndigo(Class lib), Host(Console) , Client(Console).
    三个项目全部引用System.ServiceModel, 并且Host引用了HelloIndigo项目.

    HelloIndigo项目:

    Service.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;

    namespace HelloIndigo
    {
        [ServiceContract]
        public interface IHelloIndigoService
        {
            [OperationContract]
            String HelloIndigo();
        }

        public class HelloIndigoService : IHelloIndigoService
        {
            public string HelloIndigo()
            {
                return "Hello Indigo";
            }
        }
    }

    Host项目:

    Program.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;

    namespace Host
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (ServiceHost host = new ServiceHost(typeof(HelloIndigo.HelloIndigoService), new Uri("http://localhost:8000/HelloIndigo")))
                {
                    host.AddServiceEndpoint(typeof(HelloIndigo.IHelloIndigoService), new BasicHttpBinding(), "HelloIndigoService");
                    host.Open();
                    Console.WriteLine("Press <ENTER> to terminate the service host");
                    Console.ReadLine();
                }
            }
        }
    }

    Client项目:

    ServiceProxy.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;

    namespace Client
    {
        [ServiceContract(Namespace = "http://www.thatindigogirl.com/samples/2006/06")]
        public interface IHelloIndigoService
        {
            [OperationContract]
            String HelloIndigo();
        }
    }

    Program.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;

    namespace Client
    {
        class Program
        {
            static void Main(string[] args)
            {
                EndpointAddress ep = new EndpointAddress("http://localhost:8000/HelloIndigo/HelloIndigoService");
                IHelloIndigoService proxy = ChannelFactory<IHelloIndigoService>.CreateChannel(new BasicHttpBinding(), ep);
                String s = proxy.HelloIndigo();                                                                                                                                  <=此行报错,异常见下文
                Console.WriteLine(s);
                Console.WriteLine("Press <ENTER> to terminate Client.");
                Console.ReadLine();
            }
        }
    }


    Exception Message:

    System.ServiceModel.ActionNotSupportedException:

    由于  ContractFilter 在 EndpointDispatcher 不匹配,因此 Action 为“http://www.thatindigogirl.com/samples/2006/06/IHelloIndigoService/HelloIndigo”的消息无法在接收方处理。这可能是由于协定不匹配(发送方和接收方 Action 不匹配)或发送方和接收方绑定/安全不匹配。请检查发送方和接收方是否具有相同的协定和绑定(包括安全要求,如 Message、Transport、None)。

    刚刚开始看WCF,不知道这是什么原因..
    求解决..
    顺便帮忙推荐WCF好点的资料,中英文皆可..
    先行谢过.


    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年12月19日 13:39

答案

全部回复

  • 这个可能是你的配置文件和代码绑定 不匹配造成的
    推荐 本区的版主的 wcf技术内幕 
    还有wcf高级编程

    2009年12月19日 15:05
  • Hi,
    初学者先看看 ,建议看看置顶的帖子。
    如果别人给的例子有问题,你自己调试会很麻烦。
    《WCF服务编程》初中级教程。
    《WCF技术内幕》高级教程。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年12月20日 4:37
    版主
  • 额..这个没有配置文件...
    全部需要的代码我都放上来了...
    步骤也是这样的...
    不是很清楚为什么会出现这样的问题...


    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年12月20日 5:04
  • 你确定这是你自己写的吗?  上面项目正常 下面的可能地址错误了  没有实例化实体类  还有一点疑问就是 为什么第二个wcf声明  没有继承类型 只有接口 和第一个区别是多了个命名空间 我想应该这点造成的 
    2009年12月20日 7:44
  • 额.这个是书上的第一个例子...
    我看后面的解释好像是什么服务和契约分开之类的...
    还不是很明白这些东西....

    这个问题大概出在什么地方呢?要怎么改...- -!
    刚接触,有些东西还不是很理解...
    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年12月20日 8:11
  • 额.这个是书上的第一个例子...
    我看后面的解释好像是什么服务和契约分开之类的...
    还不是很明白这些东西....

    这个问题大概出在什么地方呢?要怎么改...- -!
    刚接触,有些东西还不是很理解...
    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..

    这本书 理论很多 实践上很少的  不可能一下就懂了 我也一样的 我学wcf已经看了第四遍了  还有wpf一样
    2009年12月20日 8:57
  • [ServiceContract(Namespace = "http://www.thatindigogirl.com/samples/2006/06")]
        public interface IHelloIndigoService
        {
            [OperationContract]
            String HelloIndigo();
        }
    Client端的contract 设有名空间, 而服务器端没有设。这会造成action不一致。
    设置一下服务器端contract的名空间应该就好了。
    Mog Liang
    2009年12月21日 9:59
  • 不知道怎么了...
    论坛的回复我收不到提醒邮件了...
    帖子是订阅状态的..
    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年12月22日 2:37
  • 论坛有时候会有问题,我也遇到订阅失败的时候。
    不过这个情况很少见


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年12月22日 12:22
    版主