WCF wsHttpBinding 'attributeSuite' не может быть проанализирована ошибка - PullRequest
1 голос
/ 22 июня 2009

Я использую VSTS 2008 + C # + .Net 3.0. Я использую самостоятельно размещенный WCF. При выполнении следующего оператора (host.Open ()) возникает следующая ошибка привязки не найдена. Я разместил весь файл app.config, есть идеи, что не так?

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

Сообщение об ошибке,

Невозможно проанализировать значение свойства «attributeSuite». Ошибка: значение «Aes128» не является допустимым экземпляром типа «System.ServiceModel.Security.SecurityAlgorithmSuite».

РЕДАКТИРОВАТЬ1: Я изменил значение параметра костюм алгоритма на По умолчанию, но встретил новую ошибку при выполнении Open (), сообщение об ошибке, любые идеи, что не так,

Проверка привязки завершилась неудачно, поскольку WSHttpBinding не поддерживает надежные сеансы с использованием безопасности транспорта (HTTPS). Не удалось открыть фабрику каналов или хост-службу. Используйте безопасность сообщений для безопасного и надежного обмена сообщениями по HTTP.

Full 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>

спасибо заранее, George

Ответы [ 2 ]

3 голосов
/ 22 июня 2009

Вам также необходимо обновить поведение службы, если вы измените конечную точку MEX с http на https - вам нужно включить параметр httpsGetEnabled (не httpGetEnabled):

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

UPDATE
Джордж, посмотрите эту ссылку 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 :
Джордж, я бы посоветовал вам взглянуть на эти ссылки, связанные с безопасностью, и почувствовать, что вам действительно нужно и чего вы хотите - и как этого достичь.

Марк

2 голосов
/ 22 июня 2009

Сообщение об ошибке верное, вы не получаете надежных сообщений через WSHttp, вам нужно использовать пользовательскую привязку и протокол .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...