2013-04-11 51 views
0

我一直在尋找整天,在這裏和其他地方,所以請原諒任何冗餘,但是,我正在嘗試做我收集的東西應該是簡單的,並且推薦的方法是構建一個WCF服務。從其他項目引用ServiceContract

該場景是一個服務,服務於多個ServiceContracts,每個服務都在它自己的項目中。

我開始簡單;在我的解決方案中,我有一個WCF ServiceLibrary和一個類庫,並且只是一個默認配置文件。

我在解決方案中有另一個項目叫做WCF_Sandbox.Greeting。程序集名稱是WCF_Sandbox.Greeting.dll

該項目是一個IGreeting類(裝飾爲ServiceContract)和一個實現類Greeting。

我真的掙扎得到的IGreetingSayHello()方法通過WCF_Sandbox服務公開。

我不斷收到要麼

錯誤或錯誤「此服務未通過實現的服務......列出」那

沒有元數據可用。

如果任何人可以建議如何從這個其他項目的服務出現在WCF_Sandbox服務,我將不勝感激。看來,這是很多人面臨的基本問題,我從來沒有看到它在任何地方以直接的方式回答。非常感謝!

app.config file. System.Configuration does not support config files for libraries. --> 
<system.serviceModel> 
<services> 
    <service name="WCF_Sandbox.Service1"> 
    <host> 
     <baseAddresses> 
     <add baseAddress = "http://localhost:8733/Design_Time_Addresses/WCF_Sandbox/Service1/" /> 
     </baseAddresses> 
    </host> 
    <endpoint address="" binding="basicHttpBinding" contract="WCF_Sandbox.IService1"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
</system.serviceModel> 
</configuration> 
+0

想到兩件事。首先,你是否參考了這些項目?其次,您是否將服務模型配置(發佈在您的問題中)放在託管服務的應用程序中?根據發佈配置頂部的註釋,您試圖直接使用配置庫。另外,你可否發佈你的項目結構?這可能會幫助我們幫助你。 – Tim 2013-04-11 01:20:27

+0

@Tim:引用其他項目。將配置放在託管服務的應用程序中?還沒。我的解決方案有一個WCF服務庫項目和一個類庫。我想在類庫中定義servicecontract&Implement類,並且由WCF服務提供服務。 WCF測試客戶端不會顯示類庫中的服務,並且出現元數據無法發現的錯誤,或者出現錯誤消息,指出該項服務不在項目實施的列表中。我沒有在代碼中包含端點,這是我希望可以給我的。 – monkeydeus 2013-04-11 17:28:28

回答

0

正如@Tim所提到的,代碼可能很有用。

我會建議以下步驟:

1)。確保項目參考(@Tim建議) - 我認爲你已經做到了

2)。也許是我錯了,但如果你的服務合同是IGreeting,則端點應當包含IGreeting,而不是服務1,和看起來像

...端點地址=「」綁定=「basicHttpBinding的」 合同=「WCF_Sandbox IGreeting

3)。確保合同屬性具有完全限定的接口名稱(即全名稱空間+接口名稱)。 4)。嘗試使用WCF配置工具(可從Visual Studio工具 - >菜單獲得)手動選擇您的合同,然後查看您的配置文件。

+0

@ evgenyl-謝謝。我現在想保持這種簡單,沒有太多的代碼發佈。如上所述,我想要一個類庫來定義接口/ ServiceContract並實現類,並且有一個單獨的服務庫來提供該類的合同。我已經完成了#1&#4,可能是我掛上了正確的#s 2&3的方法。這就是我離開任何必需的終端的原因。我在發佈之前嘗試過您的示例,但沒有成功,所以我不確定在那裏有什麼問題。 – monkeydeus 2013-04-11 17:32:30

0

我想我明白你要完成什麼 - 你想通過庫將服務從其他代碼中分離出來 - 這一切都很好,但我認爲你有一些基本的誤解。我不確定你的總體經驗是什麼,所以請原諒我,如果我說的話是你已經知道或理解的。

首先,庫不是可執行代碼。使用庫(我知道)的唯一方法是讓執行程序使用它。它們提供了一種在多個應用程序之間共享代碼而無需擁有多個源代碼副本的方法。用WCF的術語來說,這是一種將合同與託管應用程序分開的方法。因爲你的情況,這聽起來像你已經創建了庫(順便說一句,WCF服務庫一個類庫 - 它只是一個不同的項目模板,讓你啓動並運行WCF)。

接下來你需要做的是承載服務。您可以通過IIS,Windows服務或自託管應用程序來執行此操作。例如,如果要在IIS中託管服務,則可以將包含服務的庫(DLL)放在您計劃託管服務的虛擬目錄/應用程序的bin文件夾中。然後,您將在虛擬目錄/應用程序的根目錄中爲服務添加一個* .svc文件,並將ServiceModel部分從默認的app.config文件複製到web.config文件。

要使用服務,您可以通過Visual Studio(在將使用該服務的項目中)添加服務引用,也可以通過SvcUtil生成代理並將其包含在客戶端項目中。

總之,如果我理解你的設置正確,你就在那裏。你只需要託管服務,然後編寫一個客戶端來使用它。

有很多我沒有在這裏覆蓋的東西 - 這只是一種方式去了解我認爲你想要做的事情。

我強烈建議通過微軟的Getting Started Tutorial--特別是關於託管和創建客戶端的部分。

我希望這可以清除你的一些困惑 - WCF在許多不同的選項和風格上都很棒,但它也可能有一個陡峭的學習曲線。