我在Silverlight和服务实现者引用的可移植类库中有一个WCF服务接口。就像这样:
#if SILVERLIGHT
[ServiceContract]
public interface IService
{
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginTest(AsyncCallback cb, object state);
void EndTest(IAsyncResult ar);
}
#else
[ServiceContract]
public interface IService
{
[OperationContract]
void Test();
}
#endif
现在我从SL引用它并得到一个编译错误,表明该合同是同步版本而SL不支持。我认为原因是便携式库中没有定义SILVERLIGHT。但我不想定义一个,因为它被另一个非Silverlight库引用。有没有办法让编译器根据引用项目的类别自动选择正确的版本进行编译而不修改可移植的库?
答案 0 :(得分:0)
没有。您需要具有两个具有不同API的独立程序集。
如果您只使用异步方法返回Task而不是Begin / End模式,则可以保留单个可移植库。您可以使用Microsoft.Bcl.Async包在Silverlight上获得异步支持,但我不确定您是否可以在Silverlight上使用它来进行WCF。