WCF WebService с Spring.NET не может найти схему базовых адресов http - PullRequest
1 голос
/ 24 июня 2011

Я ищу весь интернет, чтобы решить эту проблему, и хотя я нашел очень похожие проблемы, ни одна из них не была моей. Вот сделка:

Я хочу настроить веб-службу WCF (.Net 4.0 и VS 2010) с Spring.NET 1.3.1. для инъекции зависимости. Сейчас я использую IIS 7 (но, возможно, позже мне потребуется настроить его для другого IIS).

Я НЕ настраиваю это для работы с HTTPS (вероятно, я хочу в будущем, но сейчас это не так).

Сначала я настроил веб-службу WCF без Spring.NET, и она отлично работала!


Сценарий 1:

Тогда я добавил это:

<object id="geoServiceWCF" type="ExampleProj.Web.WebServices.GeoServiceWCF" singleton="false" >
</object>
<object id="GeoServiceWCFServiceHost" type="Spring.ServiceModel.Activation.ServiceHostFactoryObject, Spring.Services">
  <property name="TargetName" value="geoServiceWCF" />
</object>

... Я получил следующее исключение: Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой WebHttpBinding. Схемы зарегистрированных базовых адресов: []. (Ошибка создания объекта с именем 'GeoServiceWCFServiceHost')

А вот моя часть Web.Config для WCF:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="AJAXFriendly">
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  <services>
    <service name="geoServiceWCF">
      <endpoint address=""
                behaviorConfiguration="AJAXFriendly"
                binding="webHttpBinding"
                contract="ExampleProj.Web.WebServices.IGeoServiceWCF" >
      </endpoint>
    </service>
  </services>
</system.serviceModel>

Сценарий 2:

Если я определю address = "http://localhost/ExampleProj/WebServices/GeoServiceWCF.svc" в качестве исключения, я получу еще одну ошибку: Свойство HttpGetEnabled ServiceMetadataBehavior имеет значение true, а свойство HttpGetUrl является относительным адресом, но базовый адрес http отсутствует. Либо укажите базовый адрес http, либо задайте для HttpGetUrl абсолютный адрес. (Ошибка создания объекта с именем 'GeoServiceWCFServiceHost')


Сценарий 3:

Затем, если я установлю httpGetEnabled = "true" Я получу Доступ запрещен Ошибка.

Дополнительная информация: при попытке регистрации URL-адреса возникла проблема http://+:80/ExampleProj/WebServices/GeoServiceWCF.svc/ (да, с символом «+»)


Основная информация

Я следую очень простым шагам из документа Spring.NET. Я думаю, что я что-то упустил, потому что Я не могу поверить, что мне пришлось установить так много странных параметров, чтобы это работало.

Извините за длинный вопрос, я хотел предоставить как можно больше информации.

Заранее спасибо !!

1 Ответ

1 голос
/ 24 июня 2011

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

<%@ ServiceHost Language="C#" Debug="true" Service="geoServiceWCF" Factory="Spring.ServiceModel.Activation.ServiceHostFactory" %>

Тогда вам не нужно определять объект "GeoServiceWCFServiceHost" вконтейнер.Этого достаточно:

<object id="geoServiceWCF" type="ExampleProj.Web.WebServices.GeoServiceWCF" singleton="false" >
</object>
  • Бруно
...