7

最初に、これはおそらく重複しているのでお詫びしますが、私はWCFに非常に慣れていないため、読んだものはすべて不完全または混乱しているようです。

私は基本的に、2つのエンドポイントにアクセスできるIISにWCFサービスを展開することを検討しており、一日中輪になって回っています:(

次の構造のサービスライブラリWCFdllがあります

App.config
TestSvc1.cs
ITestSvc1.cs
TestSvc2.cs
ITestSvc2.cs

これはVSWCFテストクライアントで正常に機能し、IISに展開しているので、WCFサービスアプリケーションを作成してdllを参照しました。このプロジェクトの構造は次のとおりです。

Service1.svc
Web.config

Service1.svcこれが含まれています

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCFServices.TestServices.ITestSvc1" CodeBehind="Service1.svc.cs" %>

そして私web.configは次を持っています

<services>
   <service name="WCFServices.TestServices.TestSvc2">
      <endpoint 
          address="" 
          binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages" 
          contract="WCFServices.TestServices.ITestSvc2">
          <identity>
            <dns value="localhost" />
          </identity>
      </endpoint>
      <endpoint 
           address="mex" 
           binding="mexHttpBinding"  
           contract="IMetadataExchange" />
      <host>
         <baseAddresses>
            <add baseAddress="http://localhost:8080/wcf2/TestServices/TestSvc2/" />
         </baseAddresses>
      </host>
   </service>
   <service name="WCFServices.TestServices.TestSvc1">
      <endpoint 
          address="" 
          binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages" 
          contract="WCFServices.TestServices.ITestSvc1"  
          listenUri="http://localhost:8080/wcf2/service1.svc">
          <identity>
            <dns value="" />
          </identity>
      </endpoint>
      <endpoint 
          address="" 
          binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages" 
          contract="WCFServices.TestServices.ITestSvc2" 
          listenUri="http://localhost:8080/wcf2/service1.svc">
          <identity>
            <dns value="" />
          </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding"  contract="IMetadataExchange" />
      <host>
         <baseAddresses>
            <add baseAddress="http://localhost:8080/wcf2/TestServices/TestSvc1/" />
         </baseAddresses>
      </host>
   </service>     
</services>

どんな助けでも大歓迎です。ご覧のとおり、にエンドポイントを追加しようとしましたweb.configが、これは機能しません。TestSvc2呼び出しがTestSvc1に見つからないというエラーが表示されます。これは、のエントリに関連していると思います。Service1.svc

これらのインターフェイスを継承するクラスの作成についても読みましたが、上記の内容に基づいて実装する方法が正確にはわかりません。変更する必要がありService1.svcますか?

public interface MultipleSvc : ITestSvc1, ITestSvc2
{
   // What exactly do I put here? I have no idea, do I leave it blank? This didn't work for me
}

助けていただければ幸いです:)

4

2 に答える 2

11

ゴールデン ルール: 1 つ.svc= 1 つのサービス(具体的には、1 つのサービス実装クラス)

したがって、2 つの個別のサービス (クラスWCFServices.TestServices.TestSvc1およびWCFServices.TestServices.TestSvc2) がある場合は、2 つの.svcファイル(サービスごとに 1 つずつ)が必要です。

できることは、両方のサービス コントラクトを実装する1 つのサービス実装クラスを持つことです。

public class MultipleServices : ITestSvc1, ITestSvc2
{
   // implement the service logic here, for both contracts
}

その場合、1 つの svc ファイルで十分です (.svcファイルは実装クラスごとであり、複数のサービス コントラクトをホストできます)。ただし、構成も変更する必要があります。実際にはサービス クラスが 1 つ(したがって、<service>タグは 1 つ) しかなく、その中に複数のコントラクトがホストされているためです。

<services>
   <service name="WCFServices.TestServices.MultipleServices">
      <endpoint 
          address="Service1" 
          binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages" 
          contract="WCFServices.TestServices.ITestSvc1">
          <identity>
            <dns value="" />
          </identity>
      </endpoint>
      <endpoint 
          address="Service2" 
          binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages" 
          contract="WCFServices.TestServices.ITestSvc2">
          <identity>
            <dns value="localhost" />
          </identity>
      </endpoint>
      <endpoint 
           address="mex" 
           binding="mexHttpBinding"  
           contract="IMetadataExchange" />
   </service>     
</services>

また、IIS で WCF サービスをホストしているように見えるため、値を定義しても意味がありません。サービスの「ベース」アドレスは、ファイル<baseAddress>が存在する場所 (URI)です。*.svc

于 2013-01-15T11:48:47.333 に答える