从项目中添加Web引用链接 - 未找到ChannelBase

3
我正在构建一款Silverlight应用程序。由于我有要供Silverlight和.NET模块使用的类,因此我创建了一个Silverlight项目,并在其中包含所有的类,然后创建了一个.NET项目,通过“添加链接”将其与Silverlight项目中的类关联起来。这样,我就可以将一个类文件分别编译为Silverlight和.NET程序集。我希望对Web服务引用也能实现同样的复制。也就是说,我在Silverlight项目中有Web引用。我试图从Silverlight项目中的reference.cs“添加链接”到.NET项目中。但是当我编译.NET项目时,似乎由于Silverlight和.NET框架库中该类定义的差异,ChannelBase类无法解析。这导致编译错误,指出未解决的ChannelBase。这对我来说听起来像是死路一条。你是否看到解决这个问题的办法?

你有没有找到这个问题的答案? - Robert Fraser
注意:如果你只是想让它编译通过(例如用于单元测试,而实际上不会使用WCF服务),请在你的程序集中创建一个非命名空间类(ChannelBase<T>,其中T:class),并添加构造函数和BeginInvoke/EndInvoke。我还需要添加System.ServiceModel.Channels.IHttpCookieContainerManager。 - Robert Fraser
2个回答

1

恐怕这是不可能的。两个代理完全不同:其中一个是同步的,而另一个则不是。

你能做的最好的事情就是共享定义服务的类,而不是整个代理。预先创建这些类,在两个项目中重用它们时使用“添加为链接”,然后当你添加服务引用时,标记选项“在引用程序集中重用类型”。


我现在就这样做吧。谢谢! - Robert Fraser

1

以防别人也遇到同样的问题。我有类似的问题。我正在使用slsvcutil.exe生成代理,然后尝试为.net和monotouch编译它。我一直收到ChannelBase not found的错误提示,这完全没有意义。最后我注释掉了代理客户端类中的CookieContainer属性,结果编译错误消失了,代理可以在monotouch上正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接