Как запустить метод службы WCF с атрибутом WebGet в корне хоста - PullRequest
1 голос
/ 14 июля 2011

У меня есть контракт на обслуживание WCF:

[ServiceContract]
public interface IPolicyRetriever
{
    [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
    Stream GetSilverlightPolicy();
}

с этим Web.config разделом:

  <service behaviorConfiguration="policyRetrieverServiceBehavior" 
      name="WebService.PolicyRetriever">
    <endpoint address="" binding="webHttpBinding"
        behaviorConfiguration="policyRetrieverEndpointBehavior"
        contract="WebService.IPolicyRetriever" />
  </service>

Сервер работает на localhost, с веб-хостингом Visual Studio, на порту 8080, а файл веб-службы называется WebService.svc.

Приведенный выше код сделает метод GetSilverlightPolicy() открытым для http://localhost:8080/WebService.svc/clientaccesspolicy.xml.

Мне нужно открыть файл в корне веб-сервера вместо подпути WebService.svc, но я не смог найти способ сделать это.

Установка свойства address для конечной точки / или http://localhost:8080/ не сработала.

Ни добавление раздела host к узлу обслуживания:

<host>
  <baseAddresses>
    <add baseAddress="http://localhost:8080/"/>
  </baseAddresses>
</host>

Кто-нибудь нашел решение?

1 Ответ

1 голос
/ 22 ноября 2011

Вы можете достичь этого, как показано ниже:

Установите для своего проекта WCF поддержку AspNetCompatiblityMode в значение true, как показано ниже:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

Теперь откройте свой код (класс, который реализует интерфейс) и добавьте следующий атрибут над своим классом обслуживания:

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Теперь откройте ваш global.asax, если он у вас есть (еще добавьте один), и в методе Application_Start добавьте следующую строку:

 RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(RestService)));

Теперь вы можете избавиться от файла SVC.После того, как вы выполните описанные выше шаги, создайте свой проект и разверните его в IIS.Теперь URL вашего веб-сервиса будет

http://localhost/VirtualDirectoryName/clientaccesspolicy.xml 
...