消息无法在WCF中处理异常

时间:2012-07-02 05:56:57

标签: c# .net wcf service

您正在尝试在我的Windows应用程序中调用WCF服务

我将服务引用添加到我的项目中,但在执行以下错误时发生:

  

这很可能是因为这个动作   'http://tempuri.org/IUser/SaveUser'不正确或因为   message包含无效或过期的安全上下文令牌或   因为绑定之间存在不匹配。安全上下文   如果服务中止了该通道,则令牌将无效   闲置。防止服务中止空闲会话   过早增加服务端点上的接收超时   结合。

我尝试增加服务端点绑定的接收超时。但同样的例外是存在的。

以下是config file on client

<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IUser" closeTimeout="00:01:00" openTimeout="00:01:00"
                    receiveTimeout="00:30:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"
                    transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:45:00"
                        enabled="false" />
                  <security mode="None">
                    <transport clientCredentialType="None" />
                  </security>

                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://t2.ipixsolutions.net/Service.svc" binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_IUser" contract="ServiceReference1.IUser"
                name="WSHttpBinding_IUser">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

在服务器上配置

<system.serviceModel>
        <services>
      <service behaviorConfiguration="ServiceBehavior" name="WCFLibrary.Users">
                <endpoint address="" binding="wsHttpBinding" contract="WCFLibrary.IUser">
          <identity>
                        <dns value="localhost"/>
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                    <serviceMetadata httpGetEnabled="true"/>
                    <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>

3 个答案:

答案 0 :(得分:2)

嘿,我得到了同样的异常,在我的情况下,这是因为这个设置:

<security mode="None">

如果我将其更改为:

<security mode="Message">

工作正常。我想它必须从默认值中选取,因为我没有在服务器端设置它。

答案 1 :(得分:0)

我遇到了同样的问题,并使用以下

修改了安全元素
                <security mode="Message">
                    <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
                        realm=""  />
                    <message clientCredentialType="Windows" algorithmSuite="Default" />
                </security>
  1. 我将安全模式从“无”修改为“消息”。
  2. 我将Transport的ClientCredentialType从“None”修改为“Ntlm”= clientCredentialType =“Ntlm”
  3. 我将Transport的proxyCredentialType从“None”修改为“Ntlm”= proxyCredentialType =“Ntlm”

答案 2 :(得分:0)

也许这会对某人有所帮助。我在客户的PC上弹出了同样的错误。应用程序将无法在10次登录我们的服务器9。这适用于过去非常好的WCF客户端。罪魁祸首原来是一个广告软件应用程序,他必须意外安装另一个软件。它会在http流中添加一些内容,这会搞砸我们的沟通。有问题的广告软件是RocketTab(http://malwaretips.com/blogs/rockettab-virus-removal/)。

我们解决这个问题的方法是注意到如果我们在他的PC上使用不同的Windows用户,问题就不会发生。然后我们使用任务管理器关闭他的PC上看起来不重要的进程,并发现当我们关闭client.exe进程时,我们的应用程序开始工作。这导致我们使用RocketTab(他们的可执行文件是client.exe)。