WCF 设置不正确引起的问题及核查过程

问题

近日,在Vs2013环境下做了个WCF测试。在建立好WCF工程并编译正确后,在同一解决方案中的测试工程加载wcf服务引用,出现以下问题


点击“详细信息”链接,出现错误为“请求失败,HTTP 状态为 404:  Not Found。”详细如下图所示


追查

1,首先先确认WCF 工程是否可运行访问,通过vs2013 运行WCF工程,访问相关的svc页面,结果出现错误为“System.InvalidOperationException: 协定“IService1”本身不一致。它包含一个或多个 IsTerminating 或者非 IsInitiating 操作,但是它未将 SessionMode 属性设置为 SessionMode.Required。IsInitiating 和 IsTerminating 特性只能在会话的上下文中使用。


2,检查相关的WCF 接口文件,

     [ServiceContract]
    public interface IService1
    {

        [OperationContract]
        string GetData(int value);

        [OperationContract(
            IsInitiating = true,
            IsTerminating = false
        )]
        int MethodOne();

        [OperationContract(
            IsInitiating = false,
            IsTerminating = false
        )]
        int MethodTwo(int x, int y);

        [OperationContract(
           IsInitiating = true,
           IsTerminating = true
       )]
        int MethodThree();

        // TODO: 在此添加您的服务操作
    }

接口文件中设置了IsInitiating , IsTerminating  等多个OperationContract属性信息,并且设置了 [ServiceContract]属性。

3,搜查相关解决方案,发现当设置sInitiating , IsTerminating 属性时需要修改[ServiceContract]属性 为

[ServiceContract(SessionMode = SessionMode.Required)]

4,修改完成后,再次运行WCF工程,访问相关的svc页面,结果出现错误为“System.InvalidOperationException: 协定需要会话,但是绑定“BasicHttpBinding”不支持它或者因配置不正确而无法支持它。


5,仔细核查,发现与WCF工程的配置文件web.config有关,相关配置信息如下:

    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>

6,修改配置信息如下

    <protocolMapping>
      <add binding="wsHttpBinding" scheme="http" />
    </protocolMapping>
7, 修改完成后,再次运行WCF工程,访问相关的svc页面,结果正常,出现以下结果



8,此时,停止运行wcf工程。重新在同一解决方案中的测试工程加载wcf服务引用,结果正常



猜你喜欢

转载自blog.csdn.net/mystonelxj/article/details/81034920
WCF