2010-01-20 62 views
0

有沒有人成功地利用spring.nets Spring.ServiceModel.ServiceExporterWCFWCF和Spring.nets ServiceExporter

一些背景.....

我試圖用spring.net配置WCF服務用於Web應用程序

在我的項目的第一次迭代I suceeded通過配置服務彈簧對象(我把它的ID requestManagerService)和SVC文件我指着泉水ServiceHostFactory在這個對象。 SVC文件是這樣的:

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

但是我不想用裝飾[的ServiceContract]和[OperationContract的]屬性我的接口/合同。爲了避免這種情況,你可以使用Spring 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應用程序,我得到以下錯誤:

「找不到匹配方案的基站地址http用於與結合basicHttpBinding的端點。註冊的基ADRESS方案是[]中System.ServiceModel.ServiceHostBase.MakeAbsoluteUri」時發生此錯誤)。

顯然這意味着我需要定義一個基地址....但我相信我的問題是在配置彈簧,而不是WCF,因爲我使用wcf配置,以前工作時,我沒有使用出口。

彈簧文檔暗示的配置很簡單,我相信我在做某種根本性錯誤 - 已經有人成功地運用了ServiceExporter有一個asp.net web應用程序?

回答

0

的ServiceExporter是工廠對象。在這種情況下,它將創建一個包裝requestManagerService的對象並添加必要的屬性。這是您需要在WCF配置中使用的對象,而不是原始的requestManagerService。

因此,爲了使與配置這個工作你在這裏顯示你需要

  1. 變化.svc文件服務的名稱requestManagerServiceExporter
  2. 更改服務的名稱在以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。

1

不知道,如果你解決您的問題,但我有一個類似。但是,我正在使用wsHttpBinding。也就是說,除了BennyM的建議,我必須刪除以下對象:

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

它僅用於獨立應用程序。