3

以前、リモート マシンから WCF サービスにアクセスしようとしたときに SecurityNegotiationException を解決するために質問しました。その例外は、ValtasarIII による回答のおかげで解決されました。

今、私は別の問題を抱えています。サーバーでサービスをホストしており、クライアント アプリケーションを使用してサービスに接続したいと考えています。しかし、クライアント アプリケーションからサービスにサブスクライブしようとすると、何も起こらず、最後に例外が発生します。

The open operation did not complete within the allotted timeout of 00:00:59.9939996. The time allotted to this operation may have been a portion of a longer timeout.

(必要に応じてスタック トレースを共有できます)

サービスが実行されているかどうかをテストしようとすると、クライアント マシンからブラウザ経由で正常にアクセスできます。

これが私の構成です:

サービス - web.config

<configuration>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="wsHttpDual">
          <security mode="None">
            <message clientCredentialType="None" algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <protocolMapping>
      <add scheme="http" binding="wsDualHttpBinding" bindingConfiguration="wsHttpDual"/>
    </protocolMapping>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

クライアント - app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_ISampleContract" clientBaseAddress="http://95.138.188.232:8000/myClient/">
          <!--<security mode="Message">
            <message clientCredentialType="Windows" algorithmSuite="Default" />
          </security>-->
          <security mode="None">
            <message clientCredentialType="None" algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://95.138.188.232/autofxtools/service.svc"
          binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ISampleContract"
          contract="ISampleContract" name="WSDualHttpBinding_ISampleContract">
        <identity>
          <servicePrincipalName value="host/95.138.188.232" />
        </identity>
      </endpoint>

    </client>
  </system.serviceModel>
</configuration>

解決策を探しましたが、何もうまくいきませんでした。サービス構成は、セキュリティ要件を示唆していないようです。ただし、同じ構成のクライアントは、実際にはサービスと同じマシンから動作しますが、リモート マシンからは動作しません。これは、(wsDualHttpBinding のデフォルトとして) Windows 認証がまだ存在することを意味しますか? もしそうなら、どこが間違っているのですか?

ポジティブなフィードバックが得られることを願っています。

よろしく。

4

1 に答える 1

2

これはファイアウォールの問題である可能性があります。ISS内でサービスをホストしていると思いますが、それぞれのポートが開いていることを確認しますか?ブラウザからサービスにアクセスしようとするとどうなりますか?

また、私はドイツのフォーラムで次のことを読みました。

Anscheinend tritt das Problem nur bei WsDualBinding auf、wen der Port 80belegtist。GibtwohlkeineMöglichkeitdenPortmitHilfevonClientBaseAdresszuändern。EinzigeMöglichkeitは、netTcpBindingを使用しています。

これは英語で意味します:

明らかに、この問題は、ポート80がすでに占有されているときにWsDualBindingを使用するときに発生します。ClientBaseAddressを使用してポートを変更する方法はないようです。唯一の方法はnetTcpBindingを使用することのようです。

于 2012-12-19T08:15:42.200 に答える