3

私はWCFとC#が初めてです。

2 つの実装 (A1 & A2) を持つ 1 つのメソッド (Do) を持つ 1 つのインターフェイス (IA) を持つ WCF サービスを作成しようとしています。

ばかげた例:

IA.cs:

namespace IA_NS
{
    [ServiceContract]
    public interface IA
    {
        [OperationContract]
        int Do(B b);
    }

    [DataContract]
    public class B
    {
        [DataMember]
        public string b1 { get; set; }
    }
}

A1.cs:

namespace A1_NS
{
    public class A1 : IA
    {
        public int Do(B b) {...}
    }
}

A2.cs:

namespace A2_NS
{
    public class A2 : IA
    {
        public int Do(B b) {...}
    }
}

両方のサービスをホストするセルフホスティングコンソール:

class Program
{
    static void Main(string[] args)
    {
        ServiceHost hostA1 = new ServiceHost(typeof(A1_NS.A1));
        hostA1.Open();
        ServiceHost hostA2 = new ServiceHost(typeof(A2_NS.A2));
        hostA2.Open();
        Console.WriteLine("Hit any key to exit...");
        Console.ReadLine();
        hostA1.Close();
        hostA2.Close();
    }
}

WCF クライアントで両方のクラスを呼び出せるようにしたい:

Client.cs:

namespace Client_NS
{
    class Program
    {
        static void Main(string[] args)
        {
            B myB = new B();
            A1 a1 = new A1();
            A2 a2 = new A2();
            A1.Do(myB);
            A2.Do(myB);
        }
    }
}

運が悪い;-(

WCF-Service app.configに2つの要素を入れてみました:

<service name="A1_NS.A1" >
    <endpoint address="http://localhost/A1"
              contract="IA_NS.IA" />
</service>
<service name="A2_NS.A2" >
    <endpoint address="http://localhost/A2"
              contract="IA_NS.IA" />
</service>

デバッガーを実行すると、デバッグ アプリ (WCF サービス ホスト) を使用して、両方のクラスの Do() メソッドをテストできます。

クライアントにそれをさせることができません。両方のサービスのサービス参照を追加しました。それはクライアントの app.config ですか、それとも何か誤解していますか?

4

2 に答える 2

0

コントラクトが 2 回表示されます (A2_NS.A2サービス タグの下)。それは間違いですか、それとも本当にある場合は、2 つ目のコントラクト (エンドポイント タグを閉じた後) を削除し、これが発生していた問題に関連しているかどうかを確認します。

contract="IA_NS.IA" />
    contract="IA_NS.IA" />
于 2013-09-12T12:46:44.817 に答える