先介绍一下开发需求:
应上级要求,需要把以前的WebServer升级为WCF,但是因为单点登录涉及的地方太多,所以,保留单点登录的WebServer服务,也就是我需要用WCF服务去调用以前的WebServer。
这个过程历时至少3天,其中报的错各种各样,我就将一些我还记得的错记录下来,做一个总结,希望对大家有所帮助,尤其是我这种,对WebServer和WCF服务的配置不是很清楚的人
错误:
1、协定需要会话,但是绑定“WSHttpBinding”不支持它或者因配置不正确而无法支持它
2、调用方未由服务器进行身份验证
3、主机XXXXXX和主机XXXXXXXSOAP协议协商失败
4、无法激活服务,因为它需要 ASP.NET 兼容性。没有未此应用程序启用 ASP.NET 兼容性。请在 web.config 中启用 ASP.NET 兼容性或将 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 属性设置为 Required 以外的值。
先就记这些吧,一时激动,刚刚好几个错误界面都被关掉了。这里面有个要求是支持Session,我就直接贴源码和配置文件了
服务接口:
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IMemberService
{
#region 会员注册相关
/// <summary>
/// 会员注册
/// </summary>
/// <param name="MemberType">会员类型</param>
/// <param name="LoginID">会员注册帐号</param>
/// <param name="Email">电子邮箱</param>
/// <param name="Password">登录密码</param>
/// <param name="ClientIP">客户端IP</param>
/// <param name="RegSite">注册来源网站</param>
/// <param name="invitorID">邀请人ID</param>
/// <param name="userAgent">客户端代理信息</param>
/// <param name="webExplorer">浏览器版本</param>
/// <returns>返回注册提示信息</returns>
[OperationContract]
string MemberReg(string MemberType, string LoginID, string Email, string Password, string ClientIP, string RegSite, string invitorID,
string userAgent, string webExplorer);服务方法:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
[AspNetCompatibilityRequirements(RequirementsMode = System.ServiceModel.Activation.AspNetCompatibilityRequirementsMode.Required)]
public class MemberService : IMemberService
{
#region 会员注册相关
/// <summary>
/// 会员注册
/// </summary>
/// <param name="MemberType">会员类型</param>
/// <param name="LoginID">会员注册帐号</param>
/// <param name="Email">电子邮箱</param>
/// <param name="Password">登录密码</param>
/// <param name="ClientIP">客户端IP</param>
/// <param name="RegSite">注册来源网站</param>
/// <param name="invitorID">邀请人ID</param>
/// <returns>返回注册提示信息</returns>
public string MemberReg(string MemberType, string LoginID, string Email, string Password, string ClientIP, string RegSite, string invitorID,
string userAgent, string webExplorer)
{服务配置文件:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"></serviceHostingEnvironment>
<bindings>
<wsHttpBinding><!--不支持Session-->
<binding name="NoneSecurity"
maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
<readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
<security mode="None"/>
</binding><!--支持Session-->
<binding name="SessionManagementBindingConfiguration" receiveTimeout="00:00:10">
<reliableSession enabled="true"/>
<security mode="None">
<!--此属性控制安全上下文令牌是否通过客户端与服务之间的 WS-SecureConversation 交换建立。将它设置为 true 要求远程方支持 WS-SecureConversation。-->
<message establishSecurityContext="true"/>
</security>
</binding></wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="WcfSunnHooBaseService.MemberServiceBehavior"
name="WcfSunnHooBaseService.MemberService">
<host>
<baseAddresses>
<add baseAddress = "http://192.168.1.168/SunnHooBaseService/MemberService" />
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="WcfSunnHooBaseService.IMemberService"
bindingConfiguration="SessionManagementBindingConfiguration" >
<!--<identity>
<dns value="localhost"/>
</identity>-->
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfSunnHooBaseService.MemberServiceBehavior">
<serviceMetadata httpGetEnabled="true" /><!--httpsGetEnabled="false"-->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>重点我都用红色标记出来了,希望对大家有用,同时希望高手大牛们加注释,解释各个配置节点的含义