WCF和Spring.nets服务导出器

WCF和Spring.nets服务导出器,wcf,spring.net,Wcf,Spring.net,是否有人成功地将spring.netsspring.ServiceModel.ServiceExporter与WCF 一些背景 我正在尝试使用spring.net配置wcf服务,以便在web应用程序中使用 在项目的第一次迭代中,我成功地使用spring配置了服务对象(我给了它id requestManagerService),并在svc文件中将springs ServiceHostFactory指向了这个对象。svc文件如下所示: <%@ ServiceHost Language="C#"

是否有人成功地将spring.netsspring.ServiceModel.ServiceExporter与WCF

一些背景

我正在尝试使用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

因此,我在我的web配置中设置了以下内容:

<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配置,而在我不使用exporter时,WCF配置就起作用了


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

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

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

  • 将.svc文件中的服务名称更改为requestManagerServiceExporter
  • 将中服务的名称更改为requestManagerServiceExporter
  • 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。

    不确定您是否解决了问题,但我有一个类似的问题。但是,我使用的是wsHttpBinding。尽管如此,除了本尼姆的建议外,我还必须删除以下对象:

    <object id="requestManagerServiceHost"     type="Spring.ServiceModel.Activation.ServiceHostFactoryObject, Spring.Services">
       <property name="TargetName" value="requestManagerServiceExporter" />
    </object>
    
    
    
    它仅用于独立应用程序