WCF hizmetimde bir arabirim olarak dönüş türüyle birlikte bir işlev istiyorum, ancak bir istemciden aradığımda, arabirimi uygulayan sınıf değil, bir System.Object
aldım. Hizmet gönderildi.Web hizmetinde bir arabirim nasıl ortaya çıkarılır
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
[OperationContract]
IMyObject GetMyObject();
}
public interface IMyObject
{
int Add(int i, int j);
}
[DataContract]
public class MyObject : IMyObject
{
public int Add(int i, int j)
{
return i + j;
}
}
Ben bu hizmetin uygulamasında: Burada
örnek kodpublic class LinqService : IService
{
public string SayHello()
{
return "Hello";
}
public IMyObject GetMyObject()
{
return new MyObject();
}
}
SayHello()
iyi çalışıyor, ama bir System.Object
GetMyObject()
döndürür. Bu kodu GetMyObject()
IMyObject
uygulayan bir nesne döndürecek şekilde nasıl değiştirebilirim?
düzenleme 1
aşağıdaki gibi kod değiştirildi:
using System.Runtime.Serialization;
using System.ServiceModel;
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
[OperationContract]
IMyObject GetMyObject();
}
[ServiceKnownType(typeof(MyObject))]
public interface IMyObject
{
[OperationContract]
int Add(int i, int j);
}
[DataContract]
public class MyObject:IMyObject
{
public int Add(int i, int j)
{
return i + j;
}
}
Ama hiçbir başarı!
WCF yönteminizden bir arabirim döndürme amacını sorabilir miyim? – CSharpenter
Aynı şekilde bir yöntemden bir yöntemle dönebilirsiniz: Uygulamayı wcf kullanıcısından gizleme. wcf kullanıcısının neden bir arayüz için uyguladığım herhangi bir sınıfı bilmesi gerekiyor? Kullanıcının, bir nesnenin hangi özellikleri veya yöntemleri karşıladığını bilmesi yeterlidir. Örneğimde, bazı parametrelere dayanarak IMyObject öğesinin farklı bir uygulamasına dönebilirim. – mans
Genel olarak, Bu iyi bir niyet, ancak anlamsızdır. Arayan, herhangi bir "uygulama" görmeyecektir.Ayrıca bir "DataContract" içinde bir "OperationContract" bulunması desteklenmez. İkisi gerçekten ayrı kavramlar. Daha fazla bilgi için MSDN'de [Tasarım Hizmet Sözleşmeleri] 'ni (http://msdn.microsoft.com/en-us/library/ms733070.aspx) gözden geçirmelisiniz. –