簡體   English   中英

WCF和多個名稱空間的問題 - 跨多個服務引用共享對象類型

[英]Problem with WCF and multiple namespaces - sharing object types across multiple service references

我有兩個網絡服務。 一個具有用戶功能,一個具有管理功能。

兩種服務都可以有效地使用相同的對象類型,例如:

  • AdminService提供刪除/修改Customer對象的功能
  • UserService提供列出/讀取Customer對象的功能

現在在客戶端我有兩個服務引用,Webservices.Admin和Webservices.User。

如果我使用UserService來檢索Customer對象,我無法通過AdminService操作它們,因為UserService檢索Webservices.User.Customer類型的對象,但是AdminService使用Webservices.Admin.Customer類型的對象。

在服務器端,兩種類型都相同,只是屬於客戶端中的不同命名空間。

現在的問題是:我如何在不同的服務引用之間共享類型?

查看http://cgeers.com/2011/07/31/wcf-sharing-types-using-svcmap/通過調整Reference.svcmap文件,您可以確保只為不同服務使用的每個DataContract生成一個類引用。

注意:在按“更新服務參考”之前,請記住刪除節點的內容

如果你控制通信的兩端,並且兩端都只是.NET,你可以這樣做:

  • 將您的所有合同(包括數據合同)放入單獨的“合同”程序集中
  • 在服務器端實現代碼中引用該程序集,以及客戶端代碼

如果執行此操作,則在添加服務引用時,WCF將查找並使用該共享程序集,而不是為權限創建新類型。 在您的情況下,您只有一種類型Contracts.Customer或您正在處理的任何事情。

只有當您控制電線的兩端並且兩端都有.NET時,這才有效! 但在這種情況下,這是在服務器和任意數量的客戶端之間共享合同(尤其是數據合同)的好方法。

使用slsvcutil在clientside上創建WCF代理(假設clientside是.net應用程序),引用包含對象的DLL,它將用於在DLL中傳遞相同對象的所有端點

從開始 - > Visual Studio 2008 - >工具 - >可視命令提示符打開Visual Studio命令提示符

goto目錄類似於

C:\\ Program Files \\ Microsoft SDKs \\ Silverlight \\ v3.0 \\ Tools

鍵入slsvcutil並按照語法

slsvcutil http://somewcfservice:8080 /r:CommonLibrary.dll

其中CommonLibrary.dll是包含業務對象的DLL

[編輯]修復了該項目是一個Silverlight項目的事實

有一種簡單的方法可以在客戶端和服務之間共享類型,只需在添加服務引用之前向客戶端添加對共享類型程序集的引用即可。

您可以在那里找到詳細的場景和示例項目:

http://blog.walteralmeida.com/2010/08/wcf-tips-and-tricks-share-types-between-server-and-client.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM