WCF и Spring.nets ServiceExporter - PullRequest
0 голосов
/ 20 января 2010

Кто-нибудь успешно использует spring.nets Spring.ServiceModel.ServiceExporter с WCF ??

Некоторый фон .....

Я пытаюсь настроить службы wcf на spring.net для использования в веб-приложении

В моей первой итерации проекта я преуспел, настроив объект службы с помощью Spring (я дал ему id requestManagerService), и в файле svc я указал springs ServiceHostFactory на этот объект. Файл SVC выглядел так:

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

Однако я не хочу украшать мой интерфейс / контракт с атрибутами [ServiceContract] и [OperationContract]. Чтобы избежать этого вы можете использовать пружины ServiceExporter.

Итак, я настроил в своей веб-конфигурации следующее:

<object id="requestManagerService" type="SupplyAndDemand.Messaging.UI.Web.RequestManagerService, SupplyAndDemand.Messaging.UI.Web"
        singleton="false">
      </object>

 <system.serviceModel>
    <services>
      <service name="requestManagerService" behaviorConfiguration="DefaultBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="SupplyAndDemand.Shared.Interfaces.Services.IRequestManagerService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

<object id="requestManagerServiceHost" type="Spring.ServiceModel.Activation.ServiceHostFactoryObject, Spring.Services">
   <property name="TargetName" value="requestManagerServiceExporter" />
</object>

  <object id="requestManagerServiceExporter" type="Spring.ServiceModel.ServiceExporter, Spring.Services">
    <!-- The target object to export-->
    <property name="TargetName" value="requestManagerService"/>
    <!-- The namespace associated with the wcf service-->
    <property name="Namespace" value="http://supplyanddemandapp/"/>
    <property name="TypeAttributes">
      <list>
        <object type="System.ServiceModel.ServiceBehaviorAttribute, System.ServiceModel">
          <property name="ConfigurationName" value="requestManagerService"/>
        </object>
      </list>
    </property>
  </object>

Когда я запускаю веб-приложение, я получаю следующую ошибку:

"Не удалось найти базовый адрес, соответствующий схеме http для конечной точки с привязкой BasicHTTPBinding. Зарегистрированные схемы базового адреса: []" Эта ошибка возникает в System.ServiceModel.ServiceHostBase.MakeAbsoluteUri).

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

Spring-документы подразумевают, что конфигурация проста, и я убежден, что я делаю что-то в корне неправильно - кто-нибудь успешно использовал ServiceExporter с веб-приложением asp.net?

Ответы [ 2 ]

1 голос
/ 18 сентября 2013

Не уверен, что вы решили свою проблему, но у меня была похожая.Тем не менее, я использовал wsHttpBinding.При этом в дополнение к рекомендациям BennyM мне пришлось удалить следующий объект:

<object id="requestManagerServiceHost"     type="Spring.ServiceModel.Activation.ServiceHostFactoryObject, Spring.Services">
   <property name="TargetName" value="requestManagerServiceExporter" />
</object>

Он используется только для автономных приложений.

0 голосов
/ 24 января 2010

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

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

  1. изменить имя службы в файле .svc на requestManagerServiceExporter
  2. изменить имя службы в toManagerServiceExporter

Файл SVC:

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

Web.config:

<system.serviceModel>
    <services>
        <service name="requestManagerServiceExporter" behaviorConfiguration="DefaultBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="SupplyAndDemand.Shared.Interfaces.Services.IRequestManagerService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Любая другая конфигурация DI или AoP, просто используйте оригинальный запрос requestManagerService.

...