2010-06-06 75 views
1

我有一個簡單的WCF服務,自託管和.net客戶端。我使用svcutil生成代理。當我將代理添加到客戶端時,它會要求我添加System.ServiceModel.dll。那麼,我可以添加它,因爲它是一個測試場景,我在.Net平臺上工作。WCF - 跨平臺問題

但是,假設我使用不支持.Net的機器,該平臺將如何補償System.ServiceModel?

您能否介紹一下它?

編輯:我有點想法。如果我創建WCF客戶端,我需要添加ServiceModel。測試它我添加了一個ASMX客戶端(添加Web引用)。我的服務方式不採取任何參數。但是我在客戶端得到一個錯誤,要求我輸入int Result,out bool ResultSpecified。你能否請exlain爲什麼?

編輯:能否請你點我一個例子 - 如何和什麼有關「DataContractSerializer的」設置爲true

感謝

Lijo

回答

1

它會拋出一個異常補償。您需要需要安裝.NET框架以運行.NET應用程序。對於跨平臺你可以看看Mono


對不起,我誤解了你的問題。如果使用basicHttpBinding公開端點,則任何符合WS-I Basic Profile 1.1的客戶端都將能夠毫無問題地使用Web服務。這是最具互操作性的綁定。

+0

我已經在使用binding =「basicHttpBinding」,但客戶端仍然要求我添加SYstem.ServiceModel。 – Lijo 2010-06-06 09:11:27

+0

你在用什麼客戶?什麼語言/平臺?如果它是一個使用'svcutil'生成的.NET客戶端,當然它會詢問'System.ServiceModel'(請參閱編輯前的答案)。如果它是僅安裝了.NET 2.0的機器,而不是.NET 3.0或更高版本,則可以使用'wsdl.exe'生成客戶端代理。 – 2010-06-06 09:14:39

+0

我有點想法。如果我創建WCF客戶端,我需要添加ServiceModel。測試它我添加了一個ASMX客戶端(添加Web引用)。我的服務方式不採取任何參數。但我得到一個錯誤,在客戶端要求我輸入int 結果,出bool ResultSpecified。你能否請exlain爲什麼? – Lijo 2010-06-06 09:34:37

2

奇怪的問題。如果客戶端不是.NET應用程序,則顯然不需要System.ServiceModel。可以使用應用程序使用的任何語言的任何其他SOAP庫來編寫客戶端。

1

我認爲這裏有兩個問題:

  1. 如果你是自託管服務,但你想使用.NET來訪問它沒有內置的客戶端,那麼也許你應該考慮收留了它而不是在IIS內。或者,您需要確保您的託管應用程序還包含元數據綁定(MEX),以便非.NET平臺可以訪問WSDL。

  2. 如果您正在構建非.NET客戶端,那麼您將使用該平臺的一組工具或框架。在這種情況下,您可以使用不同的工具從WSDL爲您的服務創建代理。

希望有所幫助。

1

要消除在Web服務代理中生成的兩個輸出參數的需要,請在操作合同上使用[XmlSerializerFormat]屬性。重新生成代理後,方法簽名應該與您的定義匹配,而不是將您的返回類型轉換爲數據類型「Result」和指示返回變量是否存在的「ResultSpecified」。