0

IOC に Spring.NET を使用するアプリケーションと、Spring.NET が提供する他の多くの機能があります。私が今取り組んでいる問題は、WebServiceProxyFactory に似たものをセットアップして、アプリで使用したい Web サービスを自動プロキシする方法です。この構成は、単一のサービス エンドポイントに最適です。

  <object id="MyServiceClient" type="Spring.Web.Services.WebServiceProxyFactory, Spring.Services">
<property name="ServiceUri" value="https://my.service1.net/service.asmx"/>
<property name="ServiceInterface" value="Sample.IServiceClient1"/>
<property name="WebServiceProxyBaseType" value="Sample.SecureWebServiceProxy, Sample"/>
<property name="MemberAttributes">
  <dictionary>
    <entry key="*">
      <list>
        <object type="System.Web.Services.Protocols.SoapHeaderAttribute, System.Web.Services">
          <constructor-arg value="ServiceAuthenticationHeader" />
          <property name="Direction" value="In" />
        </object>
        <object type="System.Web.Services.Protocols.SoapHeaderAttribute, System.Web.Services">
          <constructor-arg value="ServiceErrorStatus" />
          <property name="Direction" value="Out" />
        </object>
      </list>
    </entry>
  </dictionary>
</property>
<property name="ProductTemplate">
  <object>
    <property name="ServiceAuthenticationHeader" ref="ServiceAuthenticationHeader" />
    <property name="ServiceErrorStatus" ref="ServiceErrorStatus" />
  </object>
</property>

ただし、アプリの構成設定に基づいて、潜在的に無制限の数のエンドポイントを処理する必要があります。構成は、さまざまな URL でホストされていても同じインターフェイスを実装している可能性があるサービス エンドポイントに関する数と詳細を教えてくれます。

私が理解できないのは、Spring.NET を構成して、ファクトリによって生成されたオブジェクトごとにServiceUriを変更できるようにする方法です。Factory の GetObject メソッドを呼び出しますが、プロキシ オブジェクトを生成する前に使用するServiceUriを何らかの形で指定したいと考えています。

今のところ、舞台裏で大変な作業を行うカスタム IFactoryObject を実装するのが最善の方法だと考えています。

ありがとう

4

1 に答える 1

1

プロキシは、SoapHttpClientProtocol から継承するインスタンスを返します。そのため、実行時に SoapHttpClientProtocol.Url プロパティを使用して URL を設定できます。

カスタム IFactoryObject は機能しますが、ProductTemplate プロパティで指定した場合に限られます。

<property name="ProductTemplate">
  <object>
    <property name="ServiceAuthenticationHeader" ref="ServiceAuthenticationHeader" />
    <property name="ServiceErrorStatus" ref="ServiceErrorStatus" />
    <property name="Url" ref="myFactoryObjectThatReturnsUrl" />
  </object>
</property>
于 2012-12-11T20:57:42.070 に答える