2010-10-29 5 views
0

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

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

От чтения кусочков я сделал следующее:

  1. Изменено связывание использовать BasicHttpBinding
  2. Удалены упоминание сертификата сервера от поведения
  3. установлен и включен WSE на классе библиотека проект.
  4. Попробуйте использовать методы веб-службы 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.

ответ

0

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

+0

Errmm, либо мое сообщение было неоднозначным, либо вы его не поняли. Веб-служба является WCF и работает на «сервере» на .NET 4.0. Настольное приложение - .NET 2.0 и просто нужно вызвать службу с именем пользователя/pwd через SSL. Многие сообщения по всему интернету говорят, что это возможно только без достаточной детализации. – Peter

+0

Я не уверен, что это возможно Питер. Ваш клиент .NET 2.0 не знает, как использовать веб-службы в целом. Возможно, есть способ сделать это, но я бы подумал, что это будет довольно хаки. – Bernard