2012-05-27 34 views
8

Visual Studio 2010 ve MS SQL Server 2005 kullanıyorum. WCF için yeni ve geliştirirken öğrenmeye çalışıyorum küçük görev yönetme uygulaması"Aktarım bağlantısından veri okunamıyor: Varolan bir bağlantı uzak ana bilgisayar tarafından zorla kapatıldı

Ben içinde iki konsol uygulamaları ile bir çözüm anda -. WCF hizmeti - bir istemci WCF servisine bağlanmadan kodumu test etmek

WCF hizmeti bağlanır LINQ to SQL kullanarak bir db WCF hizmetinin arkasındaki db'ye bir şey ekleyen bir OperationContract uyguladım ve çalışıyor.WCF hizmetinden istemciye bir GUID döndüren ve bu da çalışan bir OperationContract uyguladım.

ben aşağıdaki hata ile başarısız WCF hizmetinden Listesinin bir listesini almak çalıştığınızda: 8000/TaskerTest/Servis/işlemleri: localhost HTTP yanıtı alınırken

  • "Bir hata oluştu Bunun nedeni, HTTP protokolünü kullanmayan hizmet bitiş noktası bağlamasından kaynaklanabilir. Bu durum, bir HTTP isteği içeriğinin sunucu tarafından sonlandırıldığı bir HTTP isteği içeriğinden de kaynaklanabilir. Bu, aşağıdaki bağlantıya sahip olabilir: Temel bağlantı kapatıldı: Beklenmeyen bir hata oluştu.

Sözleşmelerim (ilk iki çalışma. GetLists sorun) 'dir:

uygulaması:

public List<ToDoList> GetLists() { 
     Guid token = OperationContext.Current.IncomingMessageHeaders.GetHeader<Guid>("token", "ns"); 
     int? userID = CheckCache(token); 

     if (userID != null) { 
      List<ToDoList> lst = DBAccess.GetListsByUserId(userID.Value); 
      return lst; 
     } 
     else 
      return null; 
    } 

DB erişim kodu:

 public static List<ToDoList> GetListsByUserId(int idCredential) { 
     TaskerModelDataContext tmdc = new TaskerModelDataContext(); 
     List<ToDoList> lists = tmdc.ToDoLists.Where(entry => entry.id_Credential == idCredential).ToList<ToDoList>(); 
     return lists; 

    } 

Ve istemci kodu (WCF hizmeti için bir Servis Referans olarak eklenir İstemci projesi):

İstemci, yukarıdaki özel durumla başarısız olur: client.GetLists();

Okuyucular tarafından gereken tüm ek ayrıntıları sağlayabilirim.

Ben Sonra oluşturulan log Microsoft hizmeti izleme Görüntüleyicisi koşuyoruz

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="sdt" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "SdrConfigExample.e2e" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 

ile ilgili izleme ve aşağıdaki hata var etkin olduğu anlaşılır

GÜNCELLEME:

Orada edildi parametrelemeye çalışırken bir hata. Şimdi ekledik

beklenmemektedir //schemas.datacontract.org/2004/07/System 'http: InnerException mesajı 'veri sözleşme adıyla' 'Tür' System.DelegateSerializationHolder + DelegateEntry DelegateSerializationHolder.DelegateEntry oldu [DataContract] dbml dosyamda "ToDoList" sınıfına ve şimdi bir istisna almıyorum. Müvekkilimde doğru sonuç sayısını elde ediyorum, ancak her sınıfın içeriği boş görünüyor.

cevap

2

Veritabanı sınıflarım dbml dosyası (LINQ to SQL) kullanılarak otomatik olarak oluşturuldu.

"TaskerModel.designer.cs" içinde (otomatik oluşturulan dosya) ToDoList sınıfına bir [DataContract()] özniteliği ekledikten sonra artık bir istisna almadım ancak istemcide aldığım sınıflar her üye için yalnızca varsayılan değerler vardı.

Sonra ekledi

[DataMember()] ToDoList sınıfının tüm üyelerine niteliklerini VE

[ServiceContract(Namespace = "http://Tasker_Server")] 
    public interface IOperations { 
     [OperationContract] 
     string CreateList(string listName, string text); 
     [OperationContract] 
     string UpdateList(int idList, string listName, string text); 
     [OperationContract] 
     List<ToDoList> GetLists(); 
} 

için

[ServiceKnownType(typeof(ToDoList))] 

eklendi Ve şimdi çalışıyor. Bunu yapmanın daha kolay bir yolu olup olmadığını bilmiyorum ama şimdi çalışıyor. Bunu yapmanın daha iyi bir yolu bilen varsa, bir yorum için minnettar olurum.

0

WCF yeniden hizmetli hizmetimi çağırırken aynı hatayı aldım. Sorun, bir yanıt olarak döndürdüğüm veri türü nedeniyle görünüyordu.

JSON'u döndürdüm ve yanıt neslim detipi DateTime ile bir değişkene sahipti. DateTime'ı dize ile değiştirdiğimde sorun çözüldü ve uygun bir yanıt döndü. Muhtemelen aynı soruna karışan birine yardımcı olacaktır.

değiştirin:

[DataMember] 
public DateTime dateFrom {get;set;} 

Sorun salt okunur özellik olduğunu oldu Benim durumumda bu

[DataMember] 
public string dateFrom {get;set;} 
0

ile. Boş bir set ekle(); ve benim problemimi çöz.

İlgili konular