4

いくつかの .net Web アプリケーションが使用している IIS 上に WCF サービスがあります。私は、新しい WCF サービスを作成する任務を負っていました。既存の Web アプリは、web.config.

私の新しいサービスには2つのインターフェースが必要だと思いますか? 私はそれを行いました.3つのインターフェースがあります- ILocationsWCF(古いサービスのインターフェースと同じ名前)ILocationDW(新しいメソッドがあります)および

ILocationService : ILocationsWCF, ILocationDW.

次にパブリッククラスLocationService : ILocationService。私は問題なく使用する新しい Web アプリを作成できますILocationServiceが、この新しいサービスに 2 つのエンドポイントを持たせる方法がわかりません。1 つは古いアプリ用で、もう 1 つは新しいアプリ用です (古いサービスは少しぎこちないので、それらを分離したままにしておき、機会があれば新しいサービスで古いアプリを再デプロイしたいと思います)。ほとんどの場合、この変更は新しいソース データによるものですが、余談になります。

これが私が得るエラーです:

バインド インスタンスは既にリッスン URI に関連付けられていますhttp://localhost:10737/LocationService.svc。2 つのエンドポイントが同じ ListenUri を共有する場合は、同じバインディング オブジェクト インスタンスも共有する必要があります。競合する 2 つのエンドポイントは、AddServiceEndpoint() 呼び出し、構成ファイル、または AddServiceEndpoint() と構成の組み合わせで指定されました。

web.configサービスモデルでの私の試み:

  <system.serviceModel>
<services>
  <service name="PPS.Services.Location.LocationService" behaviorConfiguration="LocationServiceBehavior">
    <endpoint address="" 
              binding="basicHttpBinding" name="PPS.Services.Location.LocationService"
              bindingNamespace="PPS.Services.Location" 
              contract="PPS.Services.Location.ILocationService" 
              bindingConfiguration="BasicHttpBinding_ILocationService" 
              behaviorConfiguration="HttpBehavior">
    </endpoint>
    <endpoint address=""
              binding="basicHttpBinding" name="PPS.Services.Location.LocationsWCF"
              bindingNamespace="PPS.Services.Location"
              contract="PPS.Services.Location.ILocationsWCF"
              bindingConfiguration="BasicHttpBinding_ILocationsWCF"
              behaviorConfiguration="HttpBehavior">
    </endpoint>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="LocationServiceBehavior">
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>     
  <endpointBehaviors>
    <behavior name="HttpBehavior" />
  </endpointBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_ILocationService" receiveTimeout="00:05:00" sendTimeout="00:05:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"></binding>
    <binding name="BasicHttpBinding_ILocationsWCF" receiveTimeout="00:05:00" sendTimeout="00:05:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"></binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

私のインターフェース:

namespace PPS.Services.Location
{
[ServiceContract(Name = "LocationService")]
public interface ILocationService : ILocationsWCF, ILocationServiceDW
{...

namespace PPS.Services.Location
{
[ServiceContract(Name = "LocationsWCF")]
public interface ILocationsWCF
{...

namespace PPS.Services.Location
{
[ServiceContract(Name = "LocationServiceDW")]
public interface ILocationServiceDW
{...

これらのエンドポイントに関するヘルプはありますか、それとも間違った方向に進んでしまったのでしょうか?

編集 - 新しい問題!

助けてくれてありがとう、marc_s は私をそのこぶを乗り越えさせてくれました。ここでの目標は、web.config のエンドポイントのみを変更して、既存のサービスを新しいサービスに置き換えることです。これを機能させることができません。次のようなエラーが表示されます。

...EndpointDispatcher での ContractFilter の不一致により、受信側で処理できません...

アプリケーションから古いサービスを削除して新しいサービスに置き換えた場合、コンパイルして実行すると機能しますが、古いアプリをすべて再デプロイする必要はなく、 web.config. これでもできますか?2 つのサービスには違いがあり、主に新しいデータベース (私たちの学生データは現在新しいベンダーにあり、私の管理外です) に加えて、多くのことを学び、はるかに優れたサービスを作成することができました。ここでやりたいことができますか?それとも、古いアプリをすべて新しいサービスに移行できるようになるまで、2 つのサービスを実行する必要がありますか? 契約などが同一であると確信している場合は注意してください。ただし、ファイルを表示する必要がある場合は、どのファイルかをお知らせください。ありがとう。

4

1 に答える 1