none
OperationContract mit eigenen Objekten RRS feed

  • Frage

  • Hallo zusamman

    Ich versuche gerade mein erste WCF Projekt für eine WP7 App.
    Habe nun folgendes Problem das ich nicht verstehe.

    So sieht mein Interface aus: 

     [ServiceContract(Namespace = "http://Exe.Service", Name = "QSService")]
    
     public interface IQSService
    
     {
    
     [OperationContract]
    
     string test(string t);
    
    
    
     [OperationContract]
    
     IList<LnkDTO> LnkDTOList(string s);
    
     }
    
    

    Beide Methoden sind in meiner Klasse QSService implementiert.
    Nun wenn ich die Methode LnkDTOList auskommentiere, dann funktioniert alles wunderbar im Clientprojket.

    Wenn ich sie aber drin lasse, dann wird der Client "QSServiceClient" nicht generiert wenn ich den Dienstverweis aktualisiere im Clientprojekt.

    Hier die Reference.cs MIT der LnkDTOList Methode:

    //------------------------------------------------------------------------------
    
    // <auto-generated>
    
    // Dieser Code wurde von einem Tool generiert.
    
    // Laufzeitversion:4.0.30319.1
    
    //
    
    // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
    
    // der Code erneut generiert wird.
    
    // </auto-generated>
    
    //------------------------------------------------------------------------------
    
    
    
    // 
    
    // This code was auto-generated by Microsoft.Silverlight.Phone.ServiceReference, version 3.7.0.0
    
    // 
    
    namespace WindowsCommander.QSService {
    
     
    
     
    
     [System.Diagnostics.DebuggerStepThroughAttribute()]
    
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    
     public class LnkDTO {
    
     }
    
    }
    
    
    
    

    Und hier OHNE diese Methode:
    //------------------------------------------------------------------------------
    
    // <auto-generated>
    
    // Dieser Code wurde von einem Tool generiert.
    
    // Laufzeitversion:4.0.30319.1
    
    //
    
    // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
    
    // der Code erneut generiert wird.
    
    // </auto-generated>
    
    //------------------------------------------------------------------------------
    
    
    
    // 
    
    // This code was auto-generated by Microsoft.Silverlight.Phone.ServiceReference, version 3.7.0.0
    
    // 
    
    namespace WindowsCommander.QSService {
    
     
    
     
    
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    
     [System.ServiceModel.ServiceContractAttribute(Namespace="http://Exe.Service", ConfigurationName="QSService.QSService")]
    
     public interface QSService {
    
     
    
     [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://Exe.Service/QSService/test", ReplyAction="http://Exe.Service/QSService/testResponse")]
    
     System.IAsyncResult Begintest(string t, System.AsyncCallback callback, object asyncState);
    
     
    
     string Endtest(System.IAsyncResult result);
    
     }
    
     
    
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    
     public interface QSServiceChannel : WindowsCommander.QSService.QSService, System.ServiceModel.IClientChannel {
    
     }
    
     
    
     [System.Diagnostics.DebuggerStepThroughAttribute()]
    
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    
     public partial class testCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
    
     
    
     private object[] results;
    
     
    
     public testCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
    
      base(exception, cancelled, userState) {
    
      this.results = results;
    
     }
    
     
    
     public string Result {
    
      get {
    
      base.RaiseExceptionIfNecessary();
    
      return ((string)(this.results[0]));
    
      }
    
     }
    
     }
    
     
    
     [System.Diagnostics.DebuggerStepThroughAttribute()]
    
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    
     public partial class QSServiceClient : System.ServiceModel.ClientBase<WindowsCommander.QSService.QSService>, WindowsCommander.QSService.QSService {
    
     
    
     private BeginOperationDelegate onBegintestDelegate;
    
     
    
     private EndOperationDelegate onEndtestDelegate;
    
     
    
     private System.Threading.SendOrPostCallback ontestCompletedDelegate;
    
     
    
     private BeginOperationDelegate onBeginOpenDelegate;
    
     
    
     private EndOperationDelegate onEndOpenDelegate;
    
     
    
     private System.Threading.SendOrPostCallback onOpenCompletedDelegate;
    
     
    
     private BeginOperationDelegate onBeginCloseDelegate;
    
     
    
     private EndOperationDelegate onEndCloseDelegate;
    
     
    
     private System.Threading.SendOrPostCallback onCloseCompletedDelegate;
    
     
    
     public QSServiceClient() {
    
     }
    
     
    
     public QSServiceClient(string endpointConfigurationName) : 
    
      base(endpointConfigurationName) {
    
     }
    
     
    
     public QSServiceClient(string endpointConfigurationName, string remoteAddress) : 
    
      base(endpointConfigurationName, remoteAddress) {
    
     }
    
     
    
     public QSServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
    
      base(endpointConfigurationName, remoteAddress) {
    
     }
    
     
    
     public QSServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
    
      base(binding, remoteAddress) {
    
     }
    
     
    
     public System.Net.CookieContainer CookieContainer {
    
      get {
    
      System.ServiceModel.Channels.IHttpCookieContainerManager httpCookieContainerManager = this.InnerChannel.GetProperty<System.ServiceModel.Channels.IHttpCookieContainerManager>();
    
      if ((httpCookieContainerManager != null)) {
    
       return httpCookieContainerManager.CookieContainer;
    
      }
    
      else {
    
       return null;
    
      }
    
      }
    
      set {
    
      System.ServiceModel.Channels.IHttpCookieContainerManager httpCookieContainerManager = this.InnerChannel.GetProperty<System.ServiceModel.Channels.IHttpCookieContainerManager>();
    
      if ((httpCookieContainerManager != null)) {
    
       httpCookieContainerManager.CookieContainer = value;
    
      }
    
      else {
    
       throw new System.InvalidOperationException("Unable to set the CookieContainer. Please make sure the binding contains an HttpC" +
    
        "ookieContainerBindingElement.");
    
      }
    
      }
    
     }
    
     
    
     public event System.EventHandler<testCompletedEventArgs> testCompleted;
    
     
    
     public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> OpenCompleted;
    
     
    
     public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> CloseCompleted;
    
     
    
     [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    
     System.IAsyncResult WindowsCommander.QSService.QSService.Begintest(string t, System.AsyncCallback callback, object asyncState) {
    
      return base.Channel.Begintest(t, callback, asyncState);
    
     }
    
     
    
     [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    
     string WindowsCommander.QSService.QSService.Endtest(System.IAsyncResult result) {
    
      return base.Channel.Endtest(result);
    
     }
    
     
    
     private System.IAsyncResult OnBegintest(object[] inValues, System.AsyncCallback callback, object asyncState) {
    
      string t = ((string)(inValues[0]));
    
      return ((WindowsCommander.QSService.QSService)(this)).Begintest(t, callback, asyncState);
    
     }
    
     
    
     private object[] OnEndtest(System.IAsyncResult result) {
    
      string retVal = ((WindowsCommander.QSService.QSService)(this)).Endtest(result);
    
      return new object[] {
    
       retVal};
    
     }
    
     
    
     private void OntestCompleted(object state) {
    
      if ((this.testCompleted != null)) {
    
      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
    
      this.testCompleted(this, new testCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
    
      }
    
     }
    
     
    
     public void testAsync(string t) {
    
      this.testAsync(t, null);
    
     }
    
     
    
     public void testAsync(string t, object userState) {
    
      if ((this.onBegintestDelegate == null)) {
    
      this.onBegintestDelegate = new BeginOperationDelegate(this.OnBegintest);
    
      }
    
      if ((this.onEndtestDelegate == null)) {
    
      this.onEndtestDelegate = new EndOperationDelegate(this.OnEndtest);
    
      }
    
      if ((this.ontestCompletedDelegate == null)) {
    
      this.ontestCompletedDelegate = new System.Threading.SendOrPostCallback(this.OntestCompleted);
    
      }
    
      base.InvokeAsync(this.onBegintestDelegate, new object[] {
    
       t}, this.onEndtestDelegate, this.ontestCompletedDelegate, userState);
    
     }
    
     
    
     private System.IAsyncResult OnBeginOpen(object[] inValues, System.AsyncCallback callback, object asyncState) {
    
      return ((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(callback, asyncState);
    
     }
    
     
    
     private object[] OnEndOpen(System.IAsyncResult result) {
    
      ((System.ServiceModel.ICommunicationObject)(this)).EndOpen(result);
    
      return null;
    
     }
    
     
    
     private void OnOpenCompleted(object state) {
    
      if ((this.OpenCompleted != null)) {
    
      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
    
      this.OpenCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
    
      }
    
     }
    
     
    
     public void OpenAsync() {
    
      this.OpenAsync(null);
    
     }
    
     
    
     public void OpenAsync(object userState) {
    
      if ((this.onBeginOpenDelegate == null)) {
    
      this.onBeginOpenDelegate = new BeginOperationDelegate(this.OnBeginOpen);
    
      }
    
      if ((this.onEndOpenDelegate == null)) {
    
      this.onEndOpenDelegate = new EndOperationDelegate(this.OnEndOpen);
    
      }
    
      if ((this.onOpenCompletedDelegate == null)) {
    
      this.onOpenCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnOpenCompleted);
    
      }
    
      base.InvokeAsync(this.onBeginOpenDelegate, null, this.onEndOpenDelegate, this.onOpenCompletedDelegate, userState);
    
     }
    
     
    
     private System.IAsyncResult OnBeginClose(object[] inValues, System.AsyncCallback callback, object asyncState) {
    
      return ((System.ServiceModel.ICommunicationObject)(this)).BeginClose(callback, asyncState);
    
     }
    
     
    
     private object[] OnEndClose(System.IAsyncResult result) {
    
      ((System.ServiceModel.ICommunicationObject)(this)).EndClose(result);
    
      return null;
    
     }
    
     
    
     private void OnCloseCompleted(object state) {
    
      if ((this.CloseCompleted != null)) {
    
      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
    
      this.CloseCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
    
      }
    
     }
    
     
    
     public void CloseAsync() {
    
      this.CloseAsync(null);
    
     }
    
     
    
     public void CloseAsync(object userState) {
    
      if ((this.onBeginCloseDelegate == null)) {
    
      this.onBeginCloseDelegate = new BeginOperationDelegate(this.OnBeginClose);
    
      }
    
      if ((this.onEndCloseDelegate == null)) {
    
      this.onEndCloseDelegate = new EndOperationDelegate(this.OnEndClose);
    
      }
    
      if ((this.onCloseCompletedDelegate == null)) {
    
      this.onCloseCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnCloseCompleted);
    
      }
    
      base.InvokeAsync(this.onBeginCloseDelegate, null, this.onEndCloseDelegate, this.onCloseCompletedDelegate, userState);
    
     }
    
     
    
     protected override WindowsCommander.QSService.QSService CreateChannel() {
    
      return new QSServiceClientChannel(this);
    
     }
    
     
    
     private class QSServiceClientChannel : ChannelBase<WindowsCommander.QSService.QSService>, WindowsCommander.QSService.QSService {
    
      
    
      public QSServiceClientChannel(System.ServiceModel.ClientBase<WindowsCommander.QSService.QSService> client) : 
    
       base(client) {
    
      }
    
      
    
      public System.IAsyncResult Begintest(string t, System.AsyncCallback callback, object asyncState) {
    
      object[] _args = new object[1];
    
      _args[0] = t;
    
      System.IAsyncResult _result = base.BeginInvoke("test", _args, callback, asyncState);
    
      return _result;
    
      }
    
      
    
      public string Endtest(System.IAsyncResult result) {
    
      object[] _args = new object[0];
    
      string _result = ((string)(base.EndInvoke("test", _args, result)));
    
      return _result;
    
      }
    
     }
    
     }
    
    }
    
    
    
    

    Ich nehme mal an, das liegt daran das ich eine List von LnkDTO (von mier erstellte Klasse) Objekten zurückgebe in dieser Methode?
    Gibt es hierfür eine Lösung?

    Freundliche Grüss
    razgoolyy

     

     

    EDIT:
    Hatte in dem Objekt LnkDTO das Attribute DataContract nicht drin und ISerializable darf dort auch nicht implementiert sein.

    • Bearbeitet Robert Breitenhofer Donnerstag, 10. März 2011 14:06 Titel Korrektur
    • Verschoben Robert Breitenhofer Donnerstag, 10. März 2011 14:08 Windows Phone 7 (aus:Windows Communication Foundation (WCF))
    Samstag, 5. März 2011 12:50

Antworten

  • hallo razgoolyy,

    hast du dein LnkDTO objekt mit [DataContract] und alle Member dieses Objektes mit [DataMember] gekennzeichnet?

    Gruß Jan

    Donnerstag, 10. März 2011 13:28

Alle Antworten

  • hallo razgoolyy,

    hast du dein LnkDTO objekt mit [DataContract] und alle Member dieses Objektes mit [DataMember] gekennzeichnet?

    Gruß Jan

    Donnerstag, 10. März 2011 13:28
  • Muss ich denn alle Members mit [DataMember] kennzeichnen?
    Oder einfach nur diese, die ich gebrauchen möchte?

    Gruss razgoolyy

    Samstag, 12. März 2011 01:09
  • Hallo razgoolyy,

     

    Muss ich denn alle Members mit [DataMember] kennzeichnen?
    Oder einfach nur diese, die ich gebrauchen möchte?

    Schau Dir mal den folgenden Artikel an. Vielleicht findest Du etwas dass Dir weiter helfen kann.

    IgnoreDataMemberAttribute-Klasse (Gibt bei Anwendung auf den Member eines Typs an, dass der Member nicht Teil eines Datenvertrags und nicht serialisiert ist.)

    Grüße,

    Robert

    Dienstag, 22. März 2011 08:19