1

VSTS 2008 + C# + .Net 3.0 を使用しています。セルフホステッド WCF を使用しています。次のステートメント (host.Open()) を実行すると、次のバインディングが見つからないというエラーが発生します。app.config ファイル全体を投稿しましたが、何が問題なのですか?

ServiceHost host = new ServiceHost(typeof(MyWCFService));
host.Open();

エラーメッセージ、

プロパティ「algorithmSuite」の値を解析できません。エラー: 値 'Aes128' は、タイプ 'System.ServiceModel.Security.SecurityAlgorithmSuite' の有効なインスタンスではありません。

EDIT1: アルゴリズムスーツのオプション値をデフォルトに変更しましたが、Open() の実行時に新しいエラーが発生しました。エラーメッセージは、何が問題なのか、

WSHttpBinding がトランスポート セキュリティ (HTTPS) を介した信頼できるセッションをサポートしていないため、バインドの検証に失敗しました。チャネル ファクトリまたはサービス ホストを開くことができませんでした。HTTP を介した安全で信頼性の高いメッセージングには、メッセージ セキュリティを使用します。

完全なapp.config、

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="MyBinding"
            closeTimeout="00:00:10"
            openTimeout="00:00:20"
            receiveTimeout="00:00:30"
            sendTimeout="00:00:40"
            bypassProxyOnLocal="false"
            transactionFlow="false"
            hostNameComparisonMode="WeakWildcard"
            maxReceivedMessageSize="100000000"
            messageEncoding="Mtom"
            proxyAddress="http://foo/bar"
            textEncoding="utf-16"
            useDefaultWebProxy="false">
          <reliableSession 
               enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="Digest"
               proxyCredentialType="None"
               realm="someRealm" />
            <message clientCredentialType="Windows"
           negotiateServiceCredential="false"
           algorithmSuite="Default"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service name="MyWCFService"
                behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:9090/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="IMyService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexServiceBehavior">
          <serviceMetadata httpsGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

前もって感謝します、ジョージ

4

2 に答える 2

3

MEX エンドポイントを http から https に変更する場合は、サービスの動作も更新する必要があります。httpsGetEnabled設定 (httpGetEnabled ではなく)を有効にする必要があります。

   <behaviors>
      <serviceBehaviors>
        <behavior name="mexServiceBehavior">
          <serviceMetadata httpsGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

更新:
ジョージ、このMSDN リンクを確認してください。「Aes128」アルゴリズムはありません。既存のもののいずれかを選択する必要があります。

更新 2:

この設定を試していただけますか - 最大まで減らしてください! :-)

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="MyBinding"
            maxReceivedMessageSize="100000000"
            messageEncoding="Mtom"
            proxyAddress="http://foo/bar"
            textEncoding="utf-16"
            useDefaultWebProxy="false">
          <reliableSession enabled="false" />
          <security mode="None" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service name="MyWCFService"
                behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:9090/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="IMyService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexServiceBehavior">
          <serviceMetadata httpsGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

サービスを起動して、Visual Studio からサービス参照を追加できますか?

更新 3 :
ジョージ、これらのセキュリティ関連のリンクを見て、本当に必要なものと必要なもの、およびそれを達成する方法についての感覚をつかむことをお勧めします。

マルク

于 2009-06-22T09:19:14.553 に答える
2

エラー メッセージは正しいです。WSHttp では信頼できるメッセージが得られません。カスタム バインディングとプロトコルを使用する必要があります。

于 2009-06-22T09:47:31.033 に答える