У меня есть веб-сервис WCF, построенный в .NET 4.0, который настроен на требование имени пользователя/пароля для каждого вызова и использует сертификат сервера в поведении для шифрования запроса. В настоящее время он использует wsHttpBinding. У меня есть приложение .NET 4, которое позволяет мне называть методы в этом веб-сервисе WCF просто отлично.Как вызвать службу WCF из библиотеки классов .NET
Мне нужно вызвать эту службу из библиотеки классов .NET 2.0. Библиотека находится в VS 2010, но нацелена на .NET 2.0. Я бы просто переключился на .NET 4.0, но не мог по политическим причинам и ограничениям времени. Таким образом, wsHttpBinding и сертификат сервера, который используется сейчас, не могут быть и речи о том, что я читал до сих пор.
От чтения кусочков я сделал следующее:
- Изменено связывание использовать BasicHttpBinding
- Удалены упоминание сертификата сервера от поведения
- установлен и включен WSE на классе библиотека проект.
- Попробуйте использовать методы веб-службы WCF в .NET 2.0 winforms app - epic fail !!
Не имеет значения, как я, похоже, настраиваю привязку на сервере, 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.
Errmm, либо мое сообщение было неоднозначным, либо вы его не поняли. Веб-служба является WCF и работает на «сервере» на .NET 4.0. Настольное приложение - .NET 2.0 и просто нужно вызвать службу с именем пользователя/pwd через SSL. Многие сообщения по всему интернету говорят, что это возможно только без достаточной детализации. – Peter
Я не уверен, что это возможно Питер. Ваш клиент .NET 2.0 не знает, как использовать веб-службы в целом. Возможно, есть способ сделать это, но я бы подумал, что это будет довольно хаки. – Bernard