本帖最后由 ljmemail 于 2009-11-10 09:19:59 编辑

解决方案 »

  1.   

    晕倒,你客户端配置了安全验证,把那段代码去掉,改为和服务器端一样就可以了:把客户端的
              <security mode="Message"> 
                <transport clientCredentialType="Windows" proxyCredentialType="None" 
                  realm="" /> 
                <message clientCredentialType="Windows" negotiateServiceCredential="true" 
                  algorithmSuite="Default" establishSecurityContext="true" /> 
              </security> 
    改为
    <security mode="None"> </security>
      

  2.   

    按照您的说明将客户端的配置内容去掉改为<security mode="None"> </security>执行后报告如下错误
    无法处理消息。这很可能是因为操作“http://DataSetInWCF/TestService/IServiceLib/GetAreas”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。
    不知道问题出在哪里
      

  3.   

    补充一下,我觉得的确如提示所说http://DataSetInWCF/TestService/IServiceLib/GetAreas是不正确的,至少应该形如http://172.16.81.71:3001/DataSetInWCF/TestService/IServiceLib/GetAreas才对,和这个有关系吗?
      

  4.   


    不是的,你理解有误,当然这也和微软的命名有关,微软它这样命名也是误导初学者的一个因素。“http://DataSetInWCF/TestService/”是命名空间,不一定要http://开头,随便什么都可以,但是必须和服务器端设置的一样,但那个设置并非在Config文件里,你在定义接口时应该有这么一句[ServiceContract(Namespace = "http://DataSetInWCF/TestService/")]
      

  5.   

    是的,在定义接口的时候有这句话[ServiceContract(Namespace = "http://DataSetInWCF/TestService/")]。那我就不明白了,我已经定将安全模式定义为security mode="None",为什么会报:这很可能是因为操作“http://DataSetInWCF/TestService/IServiceLib/GetAreas”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。请指教
      

  6.   

    一般上下文不符是由于客户端定义的接口和服务端不一致造成的。解决这类问题最简单的方法就是将服务端的接口类单独创建一个项目,编译为DLL文件,同时给客户端和服务端引用,这样就可以保证客户端和服务端的借口完全一致。
      

  7.   

    想问一下�%BPOST http://forum.csdn.net/PointForum�在客户端添加服务引用产生的ServiceReference1,这样也会造成服务端和客户端接口定义不一致吗?为什么?
      

  8.   

    上面的有乱码,重新补充。我是在客户端添加服务引用产生的ServiceReference1,这样也会造成服务端和客户端接口定义不一致吗?为什么?
      

  9.   

    此问题已经解决,wcf要求的网络环境是客户端和服务端要么在相同的域,要么在相同的工作组,同时必须用户名口令相同
      

  10.   


    问题好像不是出在这里,如果要求如此严格,那么WCF不可能广泛应用。
    目前我也遇到同样问题,客户端无法启动,但是放在一台机器上就没问题。
      

  11.   

    可参见:http://apps.hi.baidu.com/share/detail/9239981
      

  12.   

    我也碰到了这个问题,不过参照楼上的,把宿主程序的配置文件改一下,重新添加服务引用就可以了,
    发配置文件,楼主参考一下<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>