Почему инструмент отладки клиента WCF отображает только одну конечную точку baseAdress для нескольких конечных точек при отладке? - PullRequest
1 голос
/ 24 мая 2011

У меня есть следующая конфигурация для службы WCF, размещенной в моей службе Windows:

    <services>      
  <service name="MyService" behaviorConfiguration="MyServiceBehavior">        
    <endpoint address="" 
              binding="netTcpBinding" 
              bindingConfiguration="WindowsClientOverTcp"
              name="WindowsClientOverTcp" 
              contract="IMyService" />
    <endpoint address=""
              binding="wsHttpBinding"
              bindingConfiguration="WindowsClientOverHttps"
              name="WindowsClientOverHttps"
              contract="IMyService">         
    </endpoint>

    <endpoint address="mex" 
              binding="mexTcpBinding" 
              contract="IMetadataExchange" />
    <endpoint address="mex"
              binding="mexHttpsBinding"
              contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="https://MyMachine:8250/Services/MyService/Https" />
        <add baseAddress="net.tcp://MyMachine:8250/Services/MyService/tcp" />
      </baseAddresses>
    </host>        
  </service>  

1-й: Все работает.Однако у меня есть вопрос.При запуске отладки службы в VS.NET 2010 и появляется инструмент «WCF Test Client», только один адрес «net.tcp: // MyMachine: 8250 / Services / MyService / tcp» отображается в верхней части дереванавигация, и обе конечные точки отображаются как дочерние элементы (WindowsClientOverTcp и WindowsClientOverHttps).Теперь оба базовых адреса являются расходуемыми и пригодными для использования, поэтому никаких серьезных проблем не возникает.Однако почему в инструменте отображается только один адрес?Я подумал, что это может быть порядок, отображаемый в .config, поэтому я переключил их, но это ничего не изменило.

Кто-нибудь знает, почему оба базовых адреса не отображаются в инструменте тестирования клиента WCF при наличии одногослужба, предоставляющая несколько конечных точек?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

Ответ в этой теме содержит ответ на мой оригинальный вопрос:

Несколько базовых адресов и несколько конечных точек в WCF

Я был озадачен тем, что могу создать один сервис с несколькими конечными точками и несколькими конечными точками mex, который будет вести себя как 2 сервиса, реализующих один и тот же контракт. Однако мне это не нравится, потому что когда вы используете мой сервис (через net.tcp или https), обе конфигурации конечной точки добавляются к клиенту. Я думаю, что я собираюсь создать 2 разные сервисные конфигурации, каждая из которых по-прежнему будет реализовывать один и тот же контракт, но только с уникальными именами и привязками.

Тестовый клиент WCF проделал хорошую работу, чтобы точно представить, что происходит, основываясь только на чтении одной конечной точки mex, но все же выставляя обе основные конечные точки службы. Мне не очень нравится тот факт, что клиент получает все конфигурации привязки при использовании нескольких привязок в одном сервисе (это не плохо, просто не так, как я задумал, потому что клиент в моем сценарии не будет переключение между типами привязки в середине одного приложения).

Итак, в заключение я выделю конфигурацию для предоставления (2) сервисов с отдельными конечными точками и их собственными конечными точками mex, поэтому потребляющий клиент (и тестовый клиент WCF) получат только одну конфигурацию конечной точки для каждого потребляемого адреса. Чтобы сделать это, я должен внести некоторые изменения, потому что две конфигурации службы не могут указывать на одно и то же «имя службы», которое является фактическим классом, реализующим контракт. В моем сценарии, поскольку обе службы будут реализовывать один и тот же контракт, мне нужен способ дать им уникальные имена. Я добавил еще 2 контракта, которые наследуются от исходного контракта (по 1 для каждой службы) и 2 новых класса, которые наследуются от основного класса реализации. Они действительно ничего не делают, но создают отдельные заполнители для конфигурации службы WCF. Тогда каждая конфигурация службы имеет имя нового класса, что позволяет им быть различимыми.

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

Немного запишите на это:

Предоставление нескольких типов привязки для одного и того же класса обслуживания в WCF:
http://allen -conway-dotnet.blogspot.com / 2011/09 / обнажая-множественное связывание-тип-for.html

0 голосов
/ 24 мая 2011

WcfTestClient представляет сервис на основе транспорта конечной точки MEX, которую вы ему предоставляете.Если вы дадите конечную точку на основе HTTP, она представит эту, даст NET.TCP одну, и это все, что она представляет.

Если вы посмотрите на WSDL, сгенерированный службой, вы найдете только описание конечной точкидля этого транспорта.Дело не в том, что WcfTestClient ограничен, а в WSDL.

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