gpt4 book ai didi

c# - 可以使用可移植类库通过 channel 工厂在Silverlight中使用WCF服务吗?

转载 作者:太空狗 更新时间:2023-10-29 23:38:49 25 4
gpt4 key购买 nike

当前设置:silverlight客户端使用ria类和生成的服务引用来使用常规wcf服务。
目标:用channel factoriesPortable Class Library (PCL)替换服务引用和ria类。(XY目标:去掉生成的代码。)
目前的做法是:
本文的第一部分——使用通道工厂——非常简单,并且有很好的文档记录。基本上,wcf服务保持原样,但要注意必须在接口上定义ServiceContract。然后在客户机上创建一个ChannelFactory<IMyService>,提供服务url,然后像magic一样创建代理(不需要服务引用)。
Silverlight有一个缺点,即必须使用条件编译来定义异步操作协定。(在我尝试将操作合同移动到PCL时,这一点很重要。)因此服务合同将类似于:

[ServiceContract]
public interface IMyService
{
#if SILVERLIGHT
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginGetAString(AsyncCallback callback, object state);
string EndGetAString(IAsyncResult result);
#else
[OperationContract]
string GetAString();
#endif
}

注意(显然)有必要从silverlight编译中排除同步操作,如上所述。否则,调用 ChannelFactory.CreateChannel会抱怨:
协定“imyservice”包含同步操作,Silverlight不支持这些操作。将操作拆分为“begin”和“end”部分,并将operationContractAttribute上的AsyncPattern属性设置为“true”。请注意,您不必在服务器上进行相同的更改。
到现在为止,一直都还不错。下一步是将客户机和服务器之间共享的代码从ria.shared类文件移动到PCL。对于 DataContract类,这非常有效——但是尝试移动 OperationContract类会带来一个问题。silverlight channelfactory方法需要对同步方法定义进行条件编译,如上所述,这在pcl中是不可能的(据我的理解)。
问题是:
除了放弃渠道工厂方法或维护ria项目之外,最直接的方法(如果有的话)是什么?例如,有没有什么方法可以告诉silverlight简单地忽略同步操作,而不是抛出错误?或者以某种方式排除silverlight目标pcl的同步定义(例如,可能是条件构建)?

最佳答案

你看过这个post。本文将向您展示如何在Silverlight中使用普通的WCF服务,而无需静态地为服务代理生成代码(即添加服务引用向导)

关于c# - 可以使用可移植类库通过 channel 工厂在Silverlight中使用WCF服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com