3

こんにちは、私の Windows アプリケーションで WCF サービスを呼び出そうとしています。

プロジェクトにサービス参照を追加しましたが、実行中に次のエラーが発生します。

これは、アクション「http://tempuri.org/IUser/SaveUser」が正しくないか、メッセージに無効または期限切れのセキュリティ コンテキスト トークンが含まれているか、バインディング間に不一致があるためである可能性があります。非アクティブのためにサービスがチャネルを中止した場合、セキュリティ コンテキスト トークンは無効になります。サービスがアイドル セッションを途中で中止しないようにするには、サービス エンドポイントのバインディングで受信タイムアウトを早めに増やします。

サービス エンドポイントのバインディングで受信タイムアウトを増やしてみました。しかし、同じ例外があります。

こちらが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>
4

3 に答える 3

2

私の場合、これはこの設定が原因です。

<security mode="None">

それを次のように変更すると:

<security mode="Message">

それは正常に動作します。サーバー側で設定していないため、デフォルトから選択する必要があると思います。

于 2012-12-28T19:26:06.217 に答える
0

同じ問題があり、セキュリティ要素を次のように変更しました

                <security mode="Message">
                    <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
                        realm=""  />
                    <message clientCredentialType="Windows" algorithmSuite="Default" />
                </security>
  1. セキュリティモードを「なし」から「メッセージ」に変更しました。
  2. トランスポートの ClientCredentialType を「None」から「Ntlm」に変更しました = clientCredentialType="Ntlm"
  3. トランスポートの proxyCredentialType を「None」から「Ntlm」に変更しました = proxyCredentialType ="Ntlm"
于 2013-02-13T01:05:31.200 に答える
0

多分これは誰かを助けるでしょう。顧客の PC で同じエラー ポップアップが表示されました。アプリケーションは、10 回中 9 回、サーバーへのサインインに失敗しました。これは、完全に正常に動作していた WCF クライアント用です。犯人は、別のソフトウェアと一緒に誤ってインストールしたに違いないアドウェア アプリケーションであることが判明しました。http ストリームに add を挿入し、コミュニケーションを台無しにしていたのです。問題のアドウェアは RocketTab ( http://malwaretips.com/blogs/rockettab-virus-removal/ ) でした。

私たちがそれを理解した方法は、彼の PC で別の Windows ユーザーを使用した場合、問題が発生しなかったことに気付いたことです。次に、タスク マネージャーを使用して、重要ではないように見える彼の PC 上のプロセスを閉じたところ、client.exe プロセスを閉じると、アプリケーションが動作し始めたことがわかりました。それが私たちを RocketTab に導きました (実行可能ファイルは client.exe でした)。

于 2014-10-14T12:06:56.473 に答える