wcf程序错误提示:调用方未由服务进行身份验证 本帖最后由 ljmemail 于 2009-11-10 09:19:59 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 晕倒,你客户端配置了安全验证,把那段代码去掉,改为和服务器端一样就可以了:把客户端的 <security mode="Message"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" /> </security> 改为<security mode="None"> </security> 按照您的说明将客户端的配置内容去掉改为<security mode="None"> </security>执行后报告如下错误无法处理消息。这很可能是因为操作“http://DataSetInWCF/TestService/IServiceLib/GetAreas”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。不知道问题出在哪里 补充一下,我觉得的确如提示所说http://DataSetInWCF/TestService/IServiceLib/GetAreas是不正确的,至少应该形如http://172.16.81.71:3001/DataSetInWCF/TestService/IServiceLib/GetAreas才对,和这个有关系吗? 不是的,你理解有误,当然这也和微软的命名有关,微软它这样命名也是误导初学者的一个因素。“http://DataSetInWCF/TestService/”是命名空间,不一定要http://开头,随便什么都可以,但是必须和服务器端设置的一样,但那个设置并非在Config文件里,你在定义接口时应该有这么一句[ServiceContract(Namespace = "http://DataSetInWCF/TestService/")] 是的,在定义接口的时候有这句话[ServiceContract(Namespace = "http://DataSetInWCF/TestService/")]。那我就不明白了,我已经定将安全模式定义为security mode="None",为什么会报:这很可能是因为操作“http://DataSetInWCF/TestService/IServiceLib/GetAreas”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。请指教 一般上下文不符是由于客户端定义的接口和服务端不一致造成的。解决这类问题最简单的方法就是将服务端的接口类单独创建一个项目,编译为DLL文件,同时给客户端和服务端引用,这样就可以保证客户端和服务端的借口完全一致。 想问一下�%BPOST http://forum.csdn.net/PointForum�在客户端添加服务引用产生的ServiceReference1,这样也会造成服务端和客户端接口定义不一致吗?为什么? 上面的有乱码,重新补充。我是在客户端添加服务引用产生的ServiceReference1,这样也会造成服务端和客户端接口定义不一致吗?为什么? 此问题已经解决,wcf要求的网络环境是客户端和服务端要么在相同的域,要么在相同的工作组,同时必须用户名口令相同 问题好像不是出在这里,如果要求如此严格,那么WCF不可能广泛应用。目前我也遇到同样问题,客户端无法启动,但是放在一台机器上就没问题。 可参见:http://apps.hi.baidu.com/share/detail/9239981 我也碰到了这个问题,不过参照楼上的,把宿主程序的配置文件改一下,重新添加服务引用就可以了,发配置文件,楼主参考一下<configuration> <system.serviceModel> <bindings> <wsHttpBinding> <binding name="NoneSecurity" maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false"> <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/> <security mode="None"/> </binding> </wsHttpBinding> </bindings> <services> <!--添加服务--> <service name="WcfDemo.Service1" behaviorConfiguration="CalculatorServiceBehavior"> <!--name 必须与代码中的host实例初始化的服务一样 behaviorConfiguration 行为配置 --> <host> <baseAddresses> <!--添加调用服务地址--> <add baseAddress="http://10.8.1.31:8000/"/> </baseAddresses> </host> <!--添加契约接口 contract="WcfDemo.IService1" WcfDemo.IService1为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用--> <endpoint address="" binding="wsHttpBinding" contract="WcfDemo.IService1" bindingConfiguration="NoneSecurity" ></endpoint> </service> </services> <!--定义CalculatorServiceBehavior的行为--> <behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel></configuration> 数据绑定,在多线程中出现问题 关于消息 MSDN上的例子 求解答 C#如何将ListView里的数据拖放到桌面?? 这段代码删除数据库记录 求教 libxml2如何获得xml的字符串? 小弟在高校教务处工作4年了,想找一个业务规划软件来梳理教学工作,请前辈出招! 水晶报表怎么去掉"主报表"字样 高分求一段C#/winform远程启动计算机MSSQL服务的代码~~~~~~~~~~~~~~~· 求分析 服务代码!!! 关于进度条的问题 关于用C#在VS2012上开发游戏平台,请高手指点下技术,我刚开始学C# c# split函数
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
改为
<security mode="None"> </security>
无法处理消息。这很可能是因为操作“http://DataSetInWCF/TestService/IServiceLib/GetAreas”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。
不知道问题出在哪里
不是的,你理解有误,当然这也和微软的命名有关,微软它这样命名也是误导初学者的一个因素。“http://DataSetInWCF/TestService/”是命名空间,不一定要http://开头,随便什么都可以,但是必须和服务器端设置的一样,但那个设置并非在Config文件里,你在定义接口时应该有这么一句[ServiceContract(Namespace = "http://DataSetInWCF/TestService/")]
问题好像不是出在这里,如果要求如此严格,那么WCF不可能广泛应用。
目前我也遇到同样问题,客户端无法启动,但是放在一台机器上就没问题。
发配置文件,楼主参考一下<configuration>
<system.serviceModel> <bindings>
<wsHttpBinding>
<binding name="NoneSecurity"
maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
<readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
<security mode="None"/>
</binding>
</wsHttpBinding>
</bindings>
<services>
<!--添加服务-->
<service name="WcfDemo.Service1" behaviorConfiguration="CalculatorServiceBehavior">
<!--name 必须与代码中的host实例初始化的服务一样
behaviorConfiguration 行为配置 -->
<host>
<baseAddresses>
<!--添加调用服务地址-->
<add baseAddress="http://10.8.1.31:8000/"/>
</baseAddresses>
</host>
<!--添加契约接口 contract="WcfDemo.IService1" WcfDemo.IService1为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用-->
<endpoint address="" binding="wsHttpBinding" contract="WcfDemo.IService1" bindingConfiguration="NoneSecurity" ></endpoint>
</service> </services>
<!--定义CalculatorServiceBehavior的行为-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors>
</system.serviceModel>
</configuration>