问题
近日,在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服务引用,结果正常