У меня есть веб-служба WCF, встроенная в .NET 4.0, которая настроена на запрос имени пользователя / пароля при каждом вызове и использует сертификат сервера в поведении для шифрования запроса. В настоящее время он использует wsHttpBinding. У меня есть служебное приложение .NET 4, которое позволяет мне нормально вызывать методы этого веб-сервиса WCF.
Мне нужно вызвать эту службу из библиотеки классов .NET 2.0. Библиотека находится в VS 2010, но ориентирована на .NET 2.0 - я бы хотел просто перейти на .NET 4.0, но не могу по политическим причинам и из-за нехватки времени. Таким образом, wsHttpBinding и сертификат сервера в том виде, в котором они используются сейчас, исключены из того, что я читал до сих пор.
Из чтения фрагментов я сделал следующее:
- Изменена привязка для использования
BasicHttpBinding
- Удалено упоминание о сертификате сервера из поведения
- Установлено и
включен WSE в библиотеке классов
проект.
- Попробуйте использовать методы веб-службы 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.