いくつかの .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 つのサービスを実行する必要がありますか? 契約などが同一であると確信している場合は注意してください。ただし、ファイルを表示する必要がある場合は、どのファイルかをお知らせください。ありがとう。