Как вызвать службу WCF из библиотеки классов .NET - PullRequest
0 голосов
/ 29 октября 2010

У меня есть веб-служба WCF, встроенная в .NET 4.0, которая настроена на запрос имени пользователя / пароля при каждом вызове и использует сертификат сервера в поведении для шифрования запроса. В настоящее время он использует wsHttpBinding. У меня есть служебное приложение .NET 4, которое позволяет мне нормально вызывать методы этого веб-сервиса WCF.

Мне нужно вызвать эту службу из библиотеки классов .NET 2.0. Библиотека находится в VS 2010, но ориентирована на .NET 2.0 - я бы хотел просто перейти на .NET 4.0, но не могу по политическим причинам и из-за нехватки времени. Таким образом, wsHttpBinding и сертификат сервера в том виде, в котором они используются сейчас, исключены из того, что я читал до сих пор.

Из чтения фрагментов я сделал следующее:

  1. Изменена привязка для использования BasicHttpBinding
  2. Удалено упоминание о сертификате сервера из поведения
  3. Установлено и включен WSE в библиотеке классов проект.
  4. Попробуйте использовать методы веб-службы WCF в приложении winforms .NET 2.0 - эпическая ошибка !!

Неважно, как я настраиваю привязку на стороне сервера, HTTPS просто не приемлем; Единственный способ заставить его позвонить мне вообще - это использовать режим безопасности "Нет", grrrghhh! Это, конечно, позволяет мне вызывать его, но тогда данные имени пользователя и пароля не указываются и никогда не устанавливаются в службе WCF, и, следовательно, когда он в конечном итоге пытается сохранить его, происходит сбой, поскольку идентификатор пользователя равен 0.

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false"/>
    <services>
        <service name="MyService.NameHere" behaviorConfiguration="NameOfMyConfigHere">
            <endpoint binding="basicHttpBinding" bindingConfiguration="basicBinding" contract="DirectoryServices.IDirectorySubmitService">
                <identity>
                   <dns value="localhost"/>
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyBehaviourName">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <basicHttpBinding>
            <binding name="basicBinding" maxReceivedMessageSize="5242880">
                <readerQuotas maxStringContentLength="5242880"/>
                <security mode="None">
                    <transport clientCredentialType="Basic" proxyCredentialType="Basic" />
                    <message clientCredentialType="UserName"/>
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
</system.serviceModel>

Если бы кто-нибудь мог помочь мне найти правильный магический мумбо, я был бы очень признателен.

Все, что я хочу сделать, - это вызвать веб-метод WCF, предоставив имя пользователя и пароль, и заставить его использовать SSL для шифрования. Служба работает на IIS. Клиент является приложением winforms.

1 Ответ

0 голосов
/ 29 октября 2010

.NET 2.0 Framework не включает WCF (который был представлен в 3.0), поэтому я не вижу, как вы легко это достигнете. Возможно, вам придется попросить политиков откусить пулю и перейти на .NET 4.0.

...