WCF RoutingService не маршрутизирует wsDualHttpBinding с обратными вызовами - PullRequest
1 голос
/ 03 июня 2011

У меня проблемы с использованием службы маршрутизации .Net 4.0 при подключении к службе с помощью обратных вызовов.Насколько я понимаю, и привязка и обратные вызовы поддерживаются службой маршрутизации.Сервис и клиент работают нормально.

То, что я сделал, взяло образцы MS WCF и WF, расположенные здесь: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35ec8682-d5fd-4bc3-a51a-d8ad115a8792&displaylang=en

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

Служба маршрутизации настраивается следующим образом, используя консольное приложение в качестве хоста.

using (ServiceHost serviceHost =
            new ServiceHost(typeof(RoutingService)))
        {
            serviceHost.Open();
            Console.ReadLine();
        }
<system.serviceModel>
<diagnostics>
  <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true"
    logMessagesAtTransportLevel="true" />
</diagnostics>
<services>
  <!--ROUTING SERVICE -->
  <service behaviorConfiguration="routingData" name="System.ServiceModel.Routing.RoutingService" >
    <host>
      <baseAddresses>
        <add  baseAddress="http://localhost:8000/routingservice/router"/>
      </baseAddresses>
    </host>
    <endpoint address=""
              binding="wsDualHttpBinding"
              name="reqReplyEndpoint"
              contract="System.ServiceModel.Routing.IRequestReplyRouter"
              bindingConfiguration="UnSecureBinding"/>
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange"  />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="routingData">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="true" />
      <routing filterTableName="routingTable1" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <wsDualHttpBinding>
    <binding name="UnSecureBinding">
      <security mode="None" />
    </binding>
  </wsDualHttpBinding>
</bindings>
<client>
  <endpoint name="NotificationService"
            address="http://localhost/CommServices/NotificationService.svc"
            binding="wsDualHttpBinding"
            bindingConfiguration="UnSecureBinding"
            contract="*" />
</client>
<!--ROUTING SECTION -->
<routing>
  <filters>
    <filter name="MatchAllFilter1" filterType="MatchAll" />
  </filters>
  <filterTables>
    <filterTable name="routingTable1">
        <add filterName="MatchAllFilter1" endpointName="NotificationService" />
    </filterTable>
  </filterTables>    

Если я включу трассировку ServiceModel, я смогу увидеть ArgumentException глубоко в стеке WCF, за которым следовал мой след.Может кто-нибудь дать подсказку в правильном направлении или исправить меня, если мои предположения относительно возможностей обратного вызова RoutingService неверны.

TIA & Cheers Dominik

1 Ответ

3 голосов
/ 06 июня 2011

В случае, если кто-то запинается, как я, проблема заключалась в контракте на конечную точку маршрутизатора. RequestReplyRouter не поддерживает обратные вызовы, но IDuplexSessionRouter поддерживает.

<endpoint address=""
              binding="wsDualHttpBinding"
              name="reqReplyEndpoint"
              contract="System.ServiceModel.Routing.IDuplexSessionRouter"
              bindingConfiguration="UnSecureBinding"/>

С уважением Dominik

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...