2013-10-03 4 views
4

Я установил приложение Windows, оно использует службу WCF, я просто просматриваю конфигурационный файл для службы WCF с привязкой net tcp, размещенной в службе Windows, со следующей конфигурацией , Мне интересно, как клиенты могут использовать этот сервис WCF. Приложение использует эту службу для заполнения данных в пользовательском интерфейсе, и это работает. Когда я пытаюсь это использовать, я не могу это сделать через тестовый клиент WCF. Тогда как приложение использует эту услугу?Как использовать WCF-сервис с привязкой net tcp и без привязки mex

 <system.serviceModel> 
    <bindings> 
     <netTcpBinding> 

      <binding name="NetTcpBinding_FirstBindingServiceContract" closeTimeout="00:10:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" 
       transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" 
       hostNameComparisonMode="StrongWildcard" listenBacklog="10" 
       maxBufferPoolSize="999999999" maxBufferSize="999999999" maxConnections="10" 
       maxReceivedMessageSize="999999999"> 
       <readerQuotas maxDepth="999999999" 
              maxStringContentLength="999999999" 
              maxArrayLength="999999999" 
              maxBytesPerRead="999999999" 
              maxNameTableCharCount="999999999" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> 
        <message clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </netTcpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="MyServiceBehaviors"> 
       <serviceMetadata /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service name="MyService.DataAccessService" behaviorConfiguration="MyServiceBehaviors"> 

      <endpoint bindingConfiguration="NetTcpBinding_FirstBindingServiceContract" 
         name="firstBinding" address="net.tcp://localhost:25488/MyDataAccessService/MyFirstBindingAddress" 
        binding="netTcpBinding" 
        contract="MyDataService.IMyDataAccessService"> 
      </endpoint> 
     </service> 
    </services> 
</system.serviceModel> 
+0

Если вызывающее приложение знает все параметры (адрес, привязку, договор), тогда он может легко вызвать эту услугу .... –

+1

Поскольку вы используете net.tcp, мы можем предположить, что это .Net для .Net-связи (т.е. не совместимы). WCF позволяет вам «использовать общие контракты» для создания ваших прокси. I.o.w. вы можете установить ссылку на библиотеку интерфейса, которая была использована сервером для iomplement службы. Не устанавливайте ссылку на библиотеку с конкретными типами, но только на интерфейсы. –

ответ

9

Вы должны знать три вещи, чтобы вызвать службу WCF:

  • Адрес - куда звонить - в вашем случае net.tcp://localhost:25488/MyDataAccessService/MyFirstBindingAddress
  • Binding - какой протокол и параметры (в вашем случае: netTcpBinding)
  • Контракт - договор на обслуживание (0123)), чтобы определить методы обслуживания и параметры, необходимые

После того, как у вас есть эти вещи, вы можете легко настроить клиент в коде:

NetTcpBinding binding = new NetTcpBinding(NetTcpBinding.None); 
EndpointAddress address = new EndpointAddress("net.tcp://localhost:25488/MyDataAccessService/MyFirstBindingAddress"); 

ChannelFactory<IMyDataAccessService> channelFactory = new ChannelFactory<IMyDataAccessService>(binding, address); 
IMyDataAccessService _clientProxy = channelFactory.CreateChannel(); 

и теперь ваша _clientProxy может быстро вызывать методы на сервер, передавая параметры и т. д.

Конечно, для этого вам необходимо must договоритесь! Например. вы должны иметь доступ к файлу, который определяет контракт на обслуживание (и, возможно, контракты с данными, также - типы данных, отправляемые туда и обратно). Поскольку вы используете netTcpBinding, я предполагаю, что оба конца провода построены с использованием .NET здесь.

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

+0

Что делать, если мне нужно вызвать удаленную службу ... где адрес что-то вроде этого ... {net.tcp: // RemoteServer: 25488/MyDataAccessService/MyFirstBindingAddress} Есть ли какие-либо настройки безопасности? Я получаю сообщение об ошибке: «Объект связи, System.ServiceModel.Channels.ServiceChannel, не может использоваться для связи, поскольку он находится в состоянии Faulted. System.Exception {System.ServiceModel.CommunicationObjectFaultedException – rajibdotnet

+0

@marc_s Возможно ли обмен автоматически указывать информацию о контракте? Также как «Добавить ссылку на службу» и позволить Visual Studio автоматически генерировать прокси-серверы? – smwikipedia