说我有以下内容:
namespace SomeProject
{
public interface ISomething
{
string SomeMethod();
}
}
namespace SomeService
{
[DataContract]
public class CompositeType
{
[DataMember]
public ISomething Something { get; set; }
}
}
现在,在我的调用代码中,我希望能够这样做:
SomeService service = new SomeService();
service.Something.SomeMethod();
除非我将DataMember作为实现而不是接口返回,否则 SomeMethod()
不可用。有没有办法做到这一点?
答案 0 :(得分:3)
你的WCF“DataContract”就是这样一个数据契约。在客户端,您有一个代理对象,它实现了所有数据成员,但没有一个方法。您必须拥有原始类/接口定义并在客户端重建完整对象才能执行此类操作。
答案 1 :(得分:2)
这不是您希望如何使用WCF服务。 WCF是关于传输数据,而不是实现。通过执行此操作,您会混淆客户端和服务层。
但是,如果你真的想这样做,你可以告诉客户端的代理生成器重用任何现有类型......这意味着你可以
同样,我不建议这样做。
答案 2 :(得分:0)
我强烈建议您阅读一些基本的WCF教程,以便了解WCF实际所做的事情。
查看由Michele Bustamante撰写的O'Reilly书籍“学习WCF”,以及更重要的是由Juval Lowy撰写的“编程WCF服务第2版”。
WCF是一个复杂的野兽,我建议你在尝试编写代码之前确实需要一个坚实的基础。
答案 3 :(得分:0)
添加服务引用后,您必须使用实现该服务目标接口的客户端实例。
例如,假设您的接口称为ICalculator。添加了其服务参考时,自动生成的代码应如下所示:
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
// Other methods are not shown here.
}
现在,为了使用其操作,您只需创建实现该接口的类的实例,该实例也已自动生成。 这是一个示例:
// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);