Problem bei duplesen WCF-Service



  • Hallo,

    der unten stehende clientseitige Code verbindet sich mit einem duplexen (Rückkanal) WCF-Service. So wie der Code unten steht, funktioniert er auch einwandfrei. Sobald der Code aus dem Konstruktor in die Methode "Start()" verschoben wird läuft der Client in Start() auf ein Timeout. Der Aufruf "RegisterObserver()" kommt noch beim WCF-Service an, aber die Rückmeldung funktioniert nicht mehr.

    Eigentlich soll der Quellcode in eine komplett andere Klasse verlagert werden, die erst bei Bedarf, und nicht wie derzeit beim Start des Client, instanziiert wird. Dies verursacht dann auch ein Timeout.

    Bin für jeden Tipp dankbar.

    Gruß
    Norbert

    [ServiceContract(
    Name = "ObserverService",
    Namespace = "http://VarioBatch/ObserverService/",
    SessionMode = SessionMode.Required,
    CallbackContract = typeof(IVBObserverCallback))]
    public interface IVBObserver
    {
    [OperationContract()]
    int RegisterObserver();

    [OperationContract(IsOneWay = true)]
    void UnregisterObserver();
    }

    public interface IVBObserverCallback
    {
    [OperationContract(IsOneWay = true)]
    void ReceiveSPSData(Guid vbO1ProcessCellID, string spsData);
    }

    public class AppContextClient : ObserverServiceCallback
    {
    public ObserverServiceClient _VBObserverClient = null;

    public AppContextClient()
    {
    //_VBObserverClient = new ObserverServiceClient(new InstanceContext(this), "HttpBinding");
    _VBObserverClient = new ObserverServiceClient(new InstanceContext(this), "TcpBinding");
    _VBObserverClient.Open();
    }
    public override void Start()
    {
    _VBObserverClient.RegisterObserver();
    }

    #region ObserverServiceCallback Members
    public void ReceiveSPSData(Guid vbO1ProcessCellID, string spsData)
    {
    System.Diagnostics.Debug.WriteLine(spsData);
    }
    #endregion
    }

    Ausschnitt aus der App.Config:
    <client>
    <endpoint address="net.tcp://localhost:8000/Variobatch/VBObserverService/service"
    binding="netTcpBinding" bindingConfiguration="TcpBinding"
    contract="VBObserverClient.ObserverService" name="TcpBinding">
    </endpoint>
    <endpoint address="http://localhost:8001/Variobatch/VBObserverService/service"
    binding="wsDualHttpBinding" bindingConfiguration="HttpBinding"
    contract="VBObserverClient.ObserverService" name="HttpBinding">
    </endpoint>
    </client>


Anmelden zum Antworten