0

有没有人成功地将 spring.nets Spring.ServiceModel.ServiceExporterWCF一起使用?

一些背景......

我正在尝试使用 spring.net 配置 wcf 服务以在 Web 应用程序中使用

在我的项目的第一次迭代中,我通过使用 spring 配置服务对象(我给它的 id requestManagerService)并在 svc 文件中将 springs ServiceHostFactory 指向该对象来成功。svc 文件如下所示:

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

但是我不想用 [ServiceContract] 和 [OperationContract] 属性来装饰我的界面/合同。为避免这种情况,您可以使用 springs 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>

当我运行 Web 应用程序时,我收到以下错误:

“找不到与绑定 BasicHTTPBinding 的端点的方案 http 匹配的基地址。注册的基地址方案是 []”此错误发生在 System.ServiceModel.ServiceHostBase.MakeAbsoluteUri 中)。

显然,这意味着我需要定义一个基地址......但我相信我的问题在于配置 spring 而不是 WCF,因为我使用的是以前在我没有使用导出器时工作的 wcf 配置。

spring 文档暗示配置很简单,我确信我在做一些根本错误的事情 - 有没有人成功地将 ServiceExporter 与 asp.net Web 应用程序一起使用?

4

2 回答 2

1

不确定您是否解决了您的问题,但我遇到了类似的问题。但是,我使用的是 wsHttpBinding。话虽如此,除了 BennyM 的建议之外,我还必须删除以下对象:

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

它仅用于独立应用程序。

于 2013-09-18T17:55:41.827 回答
0

ServiceExporter 是一个工厂对象。在这种情况下,它将创建一个包装 requestManagerService 并添加必要属性的对象。这是您需要在 WCF 配置中使用的对象,而不是原始 requestManagerService。

因此,为了使这项工作与您在此处显示的配置一起工作,您需要

  1. 将 .svc 文件中的服务名称更改为 requestManagerServiceExporter
  2. 将服务名称更改为 requestManagerServiceExporter

Svc 文件:

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

网络配置:

<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。

于 2010-01-24T12:15:41.593 回答