从接口到WCF服务的引用方法

时间:2009-04-30 16:33:12

标签: c# wcf

说我有以下内容:

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()不可用。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

你的WCF“DataContract”就是这样一个数据契约。在客户端,您有一个代理对象,它实现了所有数据成员,但没有一个方法。您必须拥有原始类/接口定义并在客户端重建完整对象才能执行此类操作。

答案 1 :(得分:2)

这不是您希望如何使用WCF服务。 WCF是关于传输数据,而不是实现。通过执行此操作,您会混淆客户端和服务层。

但是,如果你真的想这样做,你可以告诉客户端的代理生成器重用任何现有类型......这意味着你可以

  1. 引用客户端中的“SomeProject”dll
  2. 添加服务参考
  3. 选择“高级”
  4. 选择“在引用的程序集中重用类型”
  5. 中选择要获取类型的位置

    同样,我不建议这样做。

答案 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);
相关问题