我得到了这个可怕的代码,我一直试图通过WCF服务取得成功。
在服务器端,我有这份合同:
[ServiceContract]
public interface IOhmioService
{
[OperationContract]
IEnumerable<Enumerador> GetEnumerador(string sClassType);
}
这个实现(这是我试图改进的代码,尤其是可怕的切换):
public IEnumerable<Enumerador> GetEnumerador(string sClassType)
{
IEnumerador _obj;
switch (sClassType)
{
case "Clients":
_obj = new Clientes();
break;
case "Vendors":
_obj = new Vendedores();
break;
default:
_obj = new Clientes();
break;
}
return _obj.Enumerar();
}
从cliente这样调用这个方法:
Clients = this.serviceClient.GetEnumerador("Clientes");
这个想法是这样的:我有一些课程,我实现了这个界面:
public class Enumerador
{
public int ID{ get; set; }
public string Description{ get; set; }
}
public interface IEnumerador
{
IEnumerable<Enumerador> Enumerar();
}
我想要的是客户可以决定对象希望枚举。问题是我无法直接发送Type,因为它不可序列化,因此它不会通过WCF服务。那么如何创建一个服务方法,客户端可以决定枚举的对象(返回的类型总是Enumerador)。我知道我无法在WCF上指定类型而发送数据,因为SOAP不支持它,但我只需要一种方法告诉服务器创建对象!谢谢!
答案 0 :(得分:1)
创建一个接口并拥有所有类,即Clientes,Vendedores实现它。然后将Interfact传递给方法而不是字符串。并创建一个对象并进行编码。请找到以下代码:
public interface ISample
{
IList<string> GetData();
}
public class Sample1 :ISample
{
public IList<string> GetData()
{
IList<string> names = new List<string>();
names.Add("Tom");
names.Add("Peter");
return names;
}
}
public class Sample2 : ISample
{
public IList<string> GetData()
{
IList<string> names = new List<string>();
names.Add("Human");
names.Add("Immortal");
return names;
}
}
class Program
{
static void Main(string[] args)
{
var c1 = new CalledClass();
IList<string> data = c1.GetData(new Sample2());
foreach (var name in data)
{
Console.WriteLine(name);
}
Console.ReadLine();
}
}
希望这会有所帮助。如果您需要更多信息,请与我们联系。