2009-09-28 75 views
0

我有一個項目,它依賴於Oracle Hosted Web服務(而不是WCF)。我有一份服務及其相關XSD的WSDL副本。WSDL處理外部服務的做法

生成代理和datacontract程序集的正確方法是什麼?

我開始與

XSD.exe /c /language:CS user.xsd 

對於每一個我的XSD的。這生成了一堆具有共享類型違例的類對象(所有類中都有相同的對象),所以我修剪了所有重複對象,以便它們具有單個聲明。

然後建立了組裝只用我的類文件「datacontracts.dll」

然後我產生我的服務客戶

svcutil.exe user.wsdl /n*:SomeNameSpace /r:datacontracts.dll /noconfig 

但這並沒有真正似乎給了,因爲它是我想還是導致了服務客戶端內所有類的重複。

從我注意到每一個類定義的XSD生成的類裏面有

[XmlType(Namespace = "urn:/crmondemand/xml/...")] 

我需要放置該屬性的方式,反覆類展示了一次內部在那裏我已各班成爲單數班嗎?所以我會有

[XmlType(Namespace = "urn:/crmondemand/xml/user")] 
[XmlType(Namespace = "urn:/crmondemand/xml/campaign")] 
[XmlType(Namespace = "urn:/crmondemand/xml/lead")] 
public class SharedClass 

或者我接近這個錯誤?

回答

1

首先警告......你可能知道 - 但如果你不我肯定會說修剪生成的代碼是一個災難......

至於重用類型 - 我自己從來沒有發現Microsoft堆棧在這方面特別出色......雖然有兩條思路......一個人說,「所有Web服務」 - 就其性質而言 - 都是獨立的實體......因此 - 所發出的所有代碼僅在該一個Web服務內有效。

我覺得這是令人難以置信的短視。我更喜歡重複使用任何類型的數據...但是使用.NET,我發現這非常困難......我發現的最接近的工具是名爲WSCF的工具。它做了一些很好的事情,我真的很喜歡,例如爲每個班級發放單獨的cs文件。這使得「覆蓋」他們從其他來源 - 只要源生成可串行化的等價物 - 很容易...

我與WSCF(經典頭腦你)的問題是,它不會「xml命名空間「到」c#命名空間「映射......我實際上不得不將它添加到工具本身......(我試圖將它提交回該項目,但從未聽到過悲傷)

所以我會告訴你試試out WSCF.blue(目標WCF)或者看看WCF經典。你可以在codeplex上找到它們。

希望幫助你了..

+0

「依賴於Oracle託管的Web服務(而不是WCF)」如果我已經控制了代碼,我可以用WCF替換Web服務我可能只是使用NHibernate。 – 2009-09-29 14:12:17

+0

我會回答這個問題,因爲它確實只是承認不是WCF吸收的Web服務,問題是Web服務不是WCF。 – 2009-10-19 12:49:41

+0

非常感謝克里斯 - 但我實際上主張每個微軟堆棧的Web服務我已經在這方面使用「糟透了」(儘管大部分 - 雖然 - 我喜歡MS的堆棧)... 我真的很鼓勵你看看進入WSCF.Blue ......我認爲它可以做你正在尋找的東西 - 或者至少讓你更接近......(我在.NET中處理的每個項目都使用它)在哪裏可以找到最大的'爆炸'爲你的降壓是'在單獨文件中發射'的選擇......然後 - 即使EXACT同一類不止一次發射,它會被覆蓋...(假設它們不是'真正'的名稱衝突) – dovholuk 2009-10-21 03:07:16

0

以下不按預期工作?

svcutil *.wsdl *.xsd /language:C# 
+0

我不知道這是否和預期一樣,我有一大堆不同類別的像帳戶1帳戶2等相同的名稱這可能是他們的XSD搞砸了=/ – 2009-09-29 14:13:13