2009-08-11 131 views
2

我有一个Silverlight应用程序通过WCF服务与服务器端进行通信。最初,我拥有主要Silverlight应用程序中的所有内容,但现在我想将我们的一些类分解为单独的Silverlight类库项目。然而,这给了我一些奇怪的问题...Silverlight类库中的WCF服务参考

我想将WCF通信的类别分解到单独的项目。所以我:

  • 创建一个新项目; Silverlight类库
  • 将我的Silverlight应用程序中的类移至我的Silverlight类库
  • 由于我不再从应用程序调用该应用程序,因此删除了应用程序中的服务引用。
  • 从类库项目中添加了一个服务引用。

现在 - 编译很好,我得到了类库中的服务东西的智能感知,所以它似乎很好。我还更新了服务并获得了类库中的更新。 但运行做一个服务调用给出以下错误,当它失败的应用程序时:

InvalidOperationException异常是由用户代码未处理

找不到引用合同“MyServiceReference.IMyService”在默认终结点元素ServiceModel客户端配置部分。这可能是因为没有找到适用于您的应用程序的配置文件,或者因为在客户端元素中找不到匹配此合同的端点元素。

好像找不到服务,但为什么?我认为从Silverlight类库中获取服务引用应该没有问题,因为它允许我添加一个?

回答

2

IT无法找到任何服务配置 - 您在哪里配置WCF服务?默认情况下,客户端应用程序(EXE)将具有包含要连接到的服务端点的app.config。

默认情况下,类库(DLL)没有自己的配置,但依赖于其托管应用程序为它们提供配置。

所以总而言之 - 您可能会错过客户端端点的配置。最有可能的是,它已经在类库项目中创建为app.config,但没有被使用,实际上 - 您必须将<system.serviceModel>部分移到主应用的配置中(我在Silverlight中不流利,但你会知道该把它放在哪里)。

Marc

+0

Thx - 解决了它!通过复制类库项目中的ServiceReferences.ClientConfig内容或在应用程序项目中添加相同的服务引用来解决。所以我认为它是应用程序本身将处理服务请求,即使它是在其他地方定义的?但是,这感觉有点hacky ..是否可以在类库项目中使用服务引用? – stiank81 2009-08-11 09:48:49

+1

哦,当然 - 我想说,在类库中提供服务引用是非常实用的。只要记住把他们的配置放在主应用程序 - 这就是全部:-) – 2009-08-11 10:32:03

+0

好:-) Thx的答案! – stiank81 2009-08-11 11:02:06