Несколько конечных точек под IIS

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

Это мое понимание:

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

Мой виртуальный каталог - http://localhost/WcfCert/

<services>
  <service name="WcfCertServer.Service1" behaviorConfiguration="WcfCertServer.Service1Behavior">
    <endpoint address="" binding="wsHttpBinding" contract="WcfCertServer.IService1"/>
    <endpoint address="test" binding="wsHttpBinding" contract="WcfCertServer.IService1"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>

Я могу вызвать службу с помощью http://localhost/wcfcert/service1.svc

но http://localhost/wcfcert/test/service1.svc/test не работает " t вернуть что-либо в IE или клиентском приложении

что мне здесь не хватает?

Изменить:

Итак, я провел дополнительное тестирование и вот что обнаружил.

если я запускаю WcfTestClient.exe и добавляю http://localhost:1523/Service1.svc или http://localhost:1523/Service1.svc/mex он добавит обе конечные точки под этим адрес. так что мой вопрос не должен представлять собой http://localhost:1523/Service1.svc только первая конечная точка? зачем добавление этого адреса вызывает обе конечные точки?

но если я попытаюсь добавить http://localhost:1523/Service1.svc/test, я получить

Ошибка: не удается получить метаданные от http://localhost:1523/Service1.svc/test, если это служба Windows (R) Communication Foundation, к которой у вас есть доступ, убедитесь, что вы включили публикацию метаданных по указанному адресу. Чтобы получить помощь по включению публикации метаданных, обратитесь к документации MSDN по адресу http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata URI ошибки обмена: http://localhost:1523/Service1.svc/test Метаданные содержат ссылку, которая не может быть разрешена: 'http://localhost:1523/Service1.svc/test '. Sendera:BadContextTokenСообщение не может быть обработано. Скорее всего, это связано с тем, что действие 'http://schemas.xmlsoap.org/ws/2004/09/transfer/Get 'неверно, или потому, что сообщение содержит недопустимый или просроченный токен контекста безопасности, или из-за несоответствия между привязками. Маркер контекста безопасности был бы недействительным, если бы служба прервала канал из-за бездействия. Чтобы предотвратить преждевременное прерывание сеансов ожидания службой, увеличьте время ожидания приема для привязки конечной точки службы. URI ошибки HTTP GET: http://localhost:1523/Service1.svc/test Произошла ошибка при загрузке http://localhost:1523/Service1.svc/test '. Запрос не выполнен с HTTP-статусом 400: неверный запрос.


person kay.one    schedule 25.07.2009    source источник
comment
У меня похожая проблема. Я бы хотел найти решение этой проблемы. Единственное отличие от того, что вы описываете, похоже, заключается в том, что я получаю «400 неверных запросов» без текста. Я следую описанию на msdn.microsoft.com/en-us/library /ms733766.aspx, в котором говорится, что результирующий URL-адрес будет - переведен на ваш пример - localhost / wcfcert / service1.svc / test. У меня тоже не работает.   -  person Evgeniy Berezovsky    schedule 03.08.2011
comment
URL-адрес не работает в IE (... / Service1.svc / test). Но создайте прокси и добавьте ту же конечную точку, с которой он работает. Обратитесь к этому msdn.microsoft.com/en-us /library/ms751515(v=vs.110).aspx   -  person Prasad Kanaparthi    schedule 07.12.2013


Ответы (2)


На самом деле это было бы:

http://localhost/wcfcert/service1.svc/test

Если вы хотите, чтобы URL-адрес был http://localhost/wcfcert/test/service1.svc ', тогда вам нужно будет указать полный URL в атрибуте адреса.

person jrista    schedule 25.07.2009
comment
@Keivan: для второго варианта вы установили address = localhost / wcfcert / test / service1.svc, или просто оставьте его по адресу address = test? Если вы хотите, чтобы URL-адрес был localhost / wcfcert / test / service1.svc, вам потребуется чтобы убедиться, что вы указали полный адрес в атрибуте адреса. - person jrista; 25.07.2009
comment
Я пробовал как localhost / wcfcert / test / service1.svc, так и localhost / wcfcert / service1.svc / test - person kay.one; 26.07.2009
comment
Я отредактировал вопрос, мне не нужен конкретный URL-адрес, я просто пытаюсь иметь более одной конечной точки. - person kay.one; 26.07.2009
comment
@Keivan: чтобы иметь более одной конечной точки, вам либо нужно использовать разные транспортные протоколы для привязок для каждой конечной точки, либо для нескольких конечных точек с одним и тем же протоколом вам нужны уникальные URL-адреса. Поскольку вы используете привязку wsHttp для обоих (без учета mex), вам необходимо иметь уникальный URL-адрес для каждой конечной точки. Похоже, вы правильно настроили ... так что я в настоящее время не понимаю, почему вы получаете ошибку 400. - person jrista; 26.07.2009
comment
из любопытства, заставили ли вы его работать на вашем компьютере? - person kay.one; 26.07.2009
comment
Я регулярно использую WCF и иногда сталкивался со своей долей мелких проблем, заставляющих что-то работать. Тем не менее, в конце концов, мне всегда удавалось заставить мои сервисы работать и правильно размещаться. Просто из любопытства ... вы используете IIS 7 или 6? Если вы используете IIS 6, убедитесь, что вы сопоставили расширение .svc с обработчиком ASP.NET ISAPI. - person jrista; 26.07.2009
comment
он работает под Windows 7, IIS 7. - person kay.one; 26.07.2009

Недавно я столкнулся с подобной проблемой, и я считаю, что причина в том, что WcfTestClient требует, чтобы конечная точка mex запрашивала метаданные для службы, которую он тестирует.

Когда вы добавляете адрес службы "http://localhost:1523/Service1.svc" в WcfTestClient, он фактически запрашивает конечную точку "http://localhost:1523/Service1.svc/mex", чтобы получить описание службы.

Отображается ошибка «Невозможно получить метаданные от "http://localhost:1523/Service1.svc/test", потому что WcfTestClient ищет конечную точку« / test / mex », чтобы получить метаданные для службы в« / test ».

Чтобы исправить это, вам нужно добавить еще одну конечную точку для предоставления метаданных о службе, размещенной по адресу «/ test»:

<endpoint address="/test/mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

Это решение, которое сработало для меня.

person MrUpsideDown    schedule 07.12.2013