WCF中引用类的可见性

时间:2012-01-09 10:53:12

标签: wcf callback

我将直接通过代码解释:

AddObjectToDatabase()
{
     Publish(theMessage);
}

theMessage是“Message”类的对象。 AddObjectToDatabase是一种服务方法。 “发布”方法使用Message作为参数调用IPublishing接口的“CallBackMethod”。实际上,它遍历List<IPublishing>静态对象(包含所有发布者),并为每个对象调用CallBackMethod方法。

在调用该服务的项目中,我这样做:

Class TestClass : IPublishing
{
    ...
    TestMethod()
    {
        ...
        ISubscription subsriberProxy = ProxyCreator.createProxy(this);
        subsriberProxy.Subscribe("client1");
        theService.AddObjectToDatabase();
    }

    CallBackMethod(Message m)
    {
    }
}

TestClass类必须实现一个名为“CallBackMethod”的方法,并接收一个Message对象作为参数。

我的问题是服务是由“服务引用”添加的,而且TestClass不知道Message类,因为它不是直接在服务中使用,而是在服务的方法中使用。

当我只使用Message作为参数向服务添加新方法时,服务就知道该对象并且它完美地工作。 我无法改变代码的体系结构,因为我没有编写这部分代码。

有没有办法“知道”服务使用的所有对象,即使是那些没有直接使用的对象?

编辑1:
回调是通过netTcpBinding实现的。 我无法发布一个部分,因为所有配置都是按代码进行的。

我尝试在另一个DataContract(已知)中添加[KnownType(typeof(Message))],现在我可以在visual studio中看到它。
我还尝试用(Object)而不是(Message)更改回调方法,并尝试了这个解决方案:http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

现在“唯一”问题是InvalidCastException。实际上,他无法从TheServiceClass.Message转换为TheClassLibrary.Message
ServiceClass是与服务引用(生成)一起使用的类,TheClassLibrary是定义Message类的类。

0 个答案:

没有答案