代码之家  ›  专栏  ›  技术社区  ›  Mr. T

调用操作:EndpointDispatcher上的ContractFilter不匹配

  •  0
  • Mr. T  · 技术社区  · 7 年前

    我花了几个小时来研究这个问题。我试图让WCF服务运行,现在归结为ContractFilter不匹配错误,操作如下“ http://tempuri.org/ISystemService/LogIn “。以下是客户端配置的相关部分:

    <bindings>
      <netTcpBinding>
        <binding name="netTcpBindingConfig_TimeRegistrationSystemService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                <security mode="Transport">  
                    <transport clientCredentialType="Windows" />  
                </security>
            </binding>
            <binding name="netTcpBindingConfig_SystemService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                <security mode="Transport">  
                    <transport clientCredentialType="Windows" />  
                </security>
            </binding>
      </netTcpBinding>    
    </bindings>
    <client>
      <endpoint address="net.tcp://mysrv.myteam.local:54520/MyCompany.Services.TimeRegistrationSystemService.svc" binding="netTcpBinding" bindingConfiguration="netTcpBindingConfig_SystemService" contract="SystemService.ISystemService" name="NetTcpBindingBinding_ISystemService" />
      <endpoint address="net.tcp://mysrv.myteam.local:54520/MyCompany.Services.SystemService.svc" binding="netTcpBinding" bindingConfiguration="netTcpBindingConfig_TimeRegistrationSystemService" contract="TimeRegistrationSystemService.ITimeRegistrationSystemService" name="NetTcpBindingBinding_ITimeRegistrationSystemService" />      
    </client> 
    

    这里是服务器的配置绑定配置:

    <bindings>
        <netTcpBinding>
            <binding name="netTcpBindingConfig_OtherInterfaceService">
                <security mode="Transport">  
                    <transport clientCredentialType="Windows" />  
                </security>
            </binding>
            <binding name="netTcpBindingConfig_TimeRegistrationSystemService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                <security mode="Transport">  
                    <transport clientCredentialType="Windows" />  
                </security>
            </binding>
            <binding name="netTcpBindingConfig_SystemService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                <security mode="Transport">  
                    <transport clientCredentialType="Windows" />  
                </security>
            </binding>
      </netTcpBinding>      
    </bindings>
    

    服务器配置-服务:

    <service name="MyCompany.Services.EasyLogicInterfaceService" behaviorConfiguration="release">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTcpBindingConfig_EasyLogicInterfaceService" contract="MyCompany.Services.IEasyLogicInterfaceService">          
        </endpoint>        
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://mysrv.myteam.local:54520/MyCompany.Services.EasyLogicInterfaceService.svc/" />
          </baseAddresses>
        </host>
      </service>
      <service name="MyCompany.Services.TimeRegistrationSystemService" behaviorConfiguration="release">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTcpBindingConfig_TimeRegistrationSystemService" contract="MyCompany.Services.ITimeRegistrationSystemService">          
        </endpoint>        
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://mysrv.myteam.local:54520/MyCompany.Services.SystemService.svc/" />
          </baseAddresses>
        </host>
      </service>
     <service name="MyCompany.Services.SystemService" behaviorConfiguration="release">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTcpBindingConfig_SystemService" contract="MyCompany.Services.ISystemService">          
        </endpoint>        
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://mysrv.myteam.local:54520/MyCompany.Services.SystemService.svc/" />
          </baseAddresses>
        </host>
      </service>
    

    以及行为:

    <serviceBehaviors>
        <behavior name = "debug">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name = "release">
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    

    我起初认为这可能是一个拼写错误,但我没有找到它(我是盲人吗?!?)。我已经更新了客户端解决方案中的服务引用,并在之后发布了服务器代码和客户端代码。而且,我已经通过copy'n'paste将服务器配置(绑定配置、端点添加等)中的所有相关字符串放入客户端配置中,以避免输入错误。

    然后我在stackoverflow上浏览了很多答案,却没有找到任何解决问题的方法。

    我可以在本地运行客户端和服务器代码,没有问题。只有在部署后才会出现问题。

    通过系统跟踪呼叫。诊断仅显示此错误消息。

    你看到的比我多吗,或者你知道有什么问题会引发这个错误吗?出现此错误时,客户端和服务器之间的连接已经成功建立,对吗?所以它不可能是Kerberos之类的问题。。。

    如果事实证明这只是一个拼写错误,我会提前道歉。但我找不到任何。。。

    顺致敬意,

    1 回复  |  直到 7 年前
        1
  •  1
  •   Hameed Syed    7 年前
    <client>
      <endpoint address="net.tcp://mysrv.myteam.local:54520/MyCompany.Services.TimeRegistrationSystemService.svc"... contract="SystemService.ISystemService" name="NetTcpBindingBinding_ISystemService" />
      <endpoint address="net.tcp://mysrv.myteam.local:54520/MyCompany.Services.SystemService.svc"... contract="TimeRegistrationSystemService.ITimeRegistrationSystemService" name="NetTcpBindingBinding_ITimeRegistrationSystemService" />      
    </client>
    

    客户端配置终结点具有反向约定。

    根据您的服务。配置,用于 时间注册系统服务 .svc合同应为 IT注册系统服务 对于 系统服务 .svc合同应为 iSystems服务 .