2008-10-15 18 views
21

मैंने ऐसी ऑब्जेक्ट को वापस करने की कोशिश करने में एक समस्या का सामना किया है जिसमें बाल तत्वों का संग्रह होता है जो फिर से पोते की वस्तुओं का संग्रह कर सकते हैं। मुझे एक त्रुटि मिलती है, 'मेजबान द्वारा जबरन बंद कनेक्शन'।डब्ल्यूसीएफ में जटिल डेटा प्रकार?

क्या यह काम करने का कोई तरीका है?

छद्म कोड:

Person: 
IEnumerable<Order> 

Order: 
IEnumerable<OrderLine> 

तीनों वस्तुओं DataContract विशेषता और सभी सार्वजनिक संपत्तियों मैं सामने प्रकट करना चाहते (IEnumerable के सहित) है DataMember विशेषता मैं वर्तमान में एक संरचना इस जैसी है।

मेरे पास मेरी सेवा पर एकाधिक ऑपरेशन कंट्रैक्ट है और एक ऑब्जेक्ट लौटने वाली सभी विधियां या ऑब्जेक्ट का एक आईनेमरेबल पूरी तरह से काम करता है। यह केवल तब होता है जब मैं IENumerable घोंसला करने की कोशिश करता हूं कि यह खराब हो जाता है। मेरे क्लाइंट सेवा संदर्भ में भी मैंने सामान्य संग्रह को मेरे संग्रह प्रकार के रूप में चुना है। मैं बस जोर देना चाहता हूं, केवल मेरे एक ऑपरेशन/विधियों में से एक इस त्रुटि के साथ विफल रहता है - उनमें से बाकी पूरी तरह से काम करते हैं।

संपादित करें (अधिक विस्तृत त्रुटि विवरण):

[SocketException (0x2746): An existing connection was forcibly closed by 
the remote host] 
[IOException: Unable to read data from the transport connection: 
An existing connection was forcibly closed by the remote host.] 
[WebException: The underlying connection was closed: An unexpected 
error occurred on a receive.] 
[CommunicationException: An error occurred while receiving the HTTP 
response to http://myservice.mydomain.dk/MyService.svc. This could 
be due to the service endpoint binding not using the HTTP protocol. 
This could also be due to an HTTP request context being aborted by 
the server (possibly due to the service shutting down). See server 
logs for more details.] 

मैं लॉग की तलाश करने की कोशिश की, लेकिन मैं किसी भी ... भी मैं एक WSHttpBinding और एक http endpoint उपयोग कर रहा हूँ नहीं मिल रहा।

+0

क्या आपके ऑब्जेक्ट्स में कुछ ऐसा है जो सही ढंग से क्रमबद्ध नहीं है? –

+0

मुझे नहीं पता। मैं शायद सोच रहा था कि एक नेस्टेड आईनंबरबल क्रमबद्ध नहीं हो सकता है? लेकिन मैं कैसे पता लगा सकता हूँ? मैं वास्तविक ऑपरेशन कंट्रैक्ट की वापसी के लिए सभी तरह से डीबग कर सकता हूं और सब कुछ ठीक है, लेकिन परिवहन गलत लगता है। मेरे पास कोई Serialize विशेषता नहीं है लेकिन इसके बजाय [डेटामेम्बर] –

+0

का उपयोग करें, मुझे आपके जैसा ही त्रुटि हो रही है .. मेरी कक्षाएं enum गुणों के साथ भी परिभाषित हैं, लेकिन मैं इसे कहीं भी एक समस्या के रूप में नहीं देख रहा हूं .. enums ठीक होना चाहिए .. और डिफ़ॉल्ट मान सेट करके आपका क्या मतलब है? वे मूल्य प्रकार हैं इसलिए उनके पास हमेशा एक डिफ़ॉल्ट मान होता है।मैं enum गुण निकालने का प्रयास करें और देखते हैं कि अगर यह ठीक करता होगा .. यहाँ http://msdn.microsoft.com/en-us/library/ms731923.aspx समर्थित डेटा अनुबंध कक्षाओं के बारे में कुछ जानकारी –

उत्तर

37

एक नोट के रूप में, आप WCF लॉगिंग उपयोगिताओं का उपयोग सीखने की जरूरत थी:

Logging info.

Config Editor (यह सेटअप करने के लिए एक तस्वीर बनाता है)।

Trace viewer. पूरी तरह से कमाल। कई सेवाओं (क्लाइंट और सर्वर) को ट्रेस करने और उनसे जुड़ने की अनुमति देता है और सभी विवरणों का विश्लेषण करने में आपकी सहायता करता है। आपको वास्तव में तेजी से मुद्दों की जड़ तक पहुंचने देता है। (क्योंकि जब वहाँ एक सर्वर WCF त्रुटि है, ग्राहक उपयोगी डेटा बाहर निकलने के लिए की संभावना नहीं है।)

+0

मैं ट्रेस दर्शक एप्लिकेशन कहां मिल सकती है, एमएस के संग्रह के आयोजन के अपवाद के साथ दस्तावेज इसके बारे में वार्तालाप करता है लेकिन इसके बारे में कोई संदर्भ नहीं है कि इसके साथ कैसे शुरुआत करें? –

+1

जीएल, यह विंडोज एसडीके –

+0

+1 ट्रेस व्यूअर के लिए के साथ स्थापित किया है ... यह वास्तव में एक भयानक उपकरण है! बस मेरे लिए एक मुद्दा हल किया कि मैं कल से खत्म हो रहा था। – w4ik

0

क्या आपने अपनी सेवा व्यवहार कॉन्फ़िगरेशन में निर्दिष्ट किया है? ऐसा लगता है कि इस स्टैकट्रैक में कुछ जानकारी गायब है।

आप सर्वर साइड पर अपवाद प्राप्त कर सकते हैं (उदाहरण के लिए दृश्य स्टूडियो डिबग मोड में या log4net की तरह एक प्रवेश पुस्तकालय के साथ)।

आप एक ही सेवा के बारे में कुछ अन्य विधियों (सरल HelloWorld (जैसे)) बुला सुनिश्चित करें कि सेवा विन्यास ही काम करता है होना करने की कोशिश की है? इस तरह के सिंटिनो कुछ धारावाहिक समस्याओं को भी इंगित कर सकते हैं। आप तार पर किस प्रकार भेजना चाहते हैं? क्या आप KnownType का कहीं और उपयोग करते हैं?

+0

है मैं वास्तव में सभी के लिए खुश हूँ मदद मैं प्राप्त कर सकता हूं, इसलिए जवाब देने के लिए धन्यवाद !, लेकिन कृपया मेरे प्रश्न को दोबारा पढ़ें - मेरी पद्धतियों में से केवल एक ही इस त्रुटि के साथ विफल रहता है। अपवाद के बारे में भी मैं पूर्ण स्टैकट्रैक पोस्ट कर सकता हूं लेकिन यह सिर्फ सवाल को फटकारता है? मैं इसे एक उत्तर में पोस्ट करूंगा :) –

0
Server Error in '/' Application. 
-------------------------------------------------------------------------------- 

An existing connection was forcibly closed by the remote host 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[SocketException (0x2746): An existing connection was forcibly closed by the remote host] 
    System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) +93 
    System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +119 

[IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.] 
    System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +267 
    System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size) +25 
    System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead) +306 

[WebException: The underlying connection was closed: An unexpected error occurred on a receive.] 
    System.Net.HttpWebRequest.GetResponse() +1532114 
    System.ServiceModel.Channels.HttpChannelRequest.WaitForReply(TimeSpan timeout) +40 

[CommunicationException: An error occurred while receiving the HTTP response to http://Zzzstrukturservice.xxx.dk/ZzzstrukturService.svc. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.] 
    System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +2668969 
    System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +717 
    xxx.Services.ZzzstrukturServiceClient.ZzzstrukturServiceProxy.IZzzstrukturService.GetMatrixSet(Int32 matrixSetId) +0 
    xxx.Services.ZzzstrukturServiceClient.ZzzstrukturRepository.GetMatrixSetById(Int32 matrixSetId) in f:\ccnet\work\xxx.Zzzstruktur\1. Presentation Layer\ZzzstrukturServiceClient\ZzzstrukturRepository.cs:90 
    xxx.yyy.yyyWeb.AnnoncePage.OnLoad(EventArgs e) in f:\ccnet\work\yyyV2\1. Presentation Layer\yyyWeb\Annonce.aspx.cs:40 
    System.Web.UI.Control.LoadRecursive() +47 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436 




-------------------------------------------------------------------------------- 
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433 
1

यह वास्तव में आपके पहले अपवाद वर्णन के समान जानकारी है। यह समेकित होगा कि सॉकेटसेप्शन के लिए मूल कारण क्या था। इसे सेवा में कुछ प्रकार की त्रुटि होनी चाहिए। क्या आप पता लगा सकते हैं कि बिल्कुल वही अपवाद होता है?

मैं जब सामान्य IEnumerables (वे आभासी के रूप में चिह्नित किया गया था) कि ओवरराइट कर रहे थे NHibernate से वापस जाने के लिए कोशिश कर रहा मिलती-जुलती त्रुटियां थी, और GenericPersistentBag, जो serializable नहीं है साथ substitued। आप nhibernate या कुछ इसी तरह की वजह से आभासी रूप में अपने IEnumerable datamembers चिह्नित है? यह आपकी त्रुटि समझा सकता है।

बीटीडब्ल्यू। WCF अपवाद अक्सर काफी व्यर्थ हैं (जब नीचे एक बग ट्रैकिंग जो बहुत निराशा हो सकती है;)

+0

यह सभी अपवाद जानकारी है जो मैं प्राप्त कर सकता हूं। जब मैं डीबग करता हूं तो मुझे एक ही अपवाद मिलता है (यदि मैं स्टैकट्रैक शामिल करता हूं)। हम Linq2Sql उपयोग कर रहे हैं, लेकिन वास्तव में हल्का वस्तुओं है कि केवल इन नेस्टेड संग्रह के अपवाद के साथ सरल डेटाटाइप्स धारण करने के लिए उन वस्तु परिवर्तित। परियोजना में कुछ और के हिस्से वस्तुओं उन पर DataContract है कि नहीं कर रहे हैं - - –

+0

क्या मेरा मतलब है कि वे काफी डीटीओ के हैं अन्य "डीटीओ के" –

11

ठीक है मैं अंत में मेरे मामले में वास्तविक समस्या पाया। ऐसा प्रतीत होता है कि दुनिया में सबसे बड़ी चीज नहीं है। मैं या तो उन पर एक डिफ़ॉल्ट मान सेट करें, या बजाय एक पूर्णांक या जो कुछ भी रूप में संपत्ति का पर्दाफाश करने के पूर्णांक टाइप मेरी enum पर आधारित है।

मदद करने के लिए धन्यवाद, आपके पास यह जानने का कोई तरीका नहीं था - मुझे अपनी संरचना में तीसरे स्तर पर enums मिला और व्यवस्थित रूप से डेटामैम्बर को एक-एक करके हटा दिया गया जिस तरह से मुझे पता चला।ऐसा लगता है मैं केवल एक है जो इस समस्या का सामना किया नहीं कर रहा हूँ - इस आदमी को स्पष्ट रूप से इसी तरह की समस्याओं :)

http://zianet.dk/blog/2007/11/24/serializing-enums-in-wcf/

0

मैं नहीं जानता कि क्यों यह हो सकता है। लेकिन मुझे भी इसी तरह की समस्याएं थीं।

मैं अपने enums.remove अनुक्रमित बदल गए हैं (उदाहरण, ASNOrder = 1, -।> ASNOrder,), और कोई त्रुटि हुई।

1

मुझे भी वही समस्या है (.NET 3.5)। मेरी बेस क्लास DataContract को ज्ञात प्रकार से गुम हो गया था। यह दुर्भाग्यपूर्ण है कि डब्ल्यूसीएफ त्रुटि अधिक वर्णनात्मक नहीं थी।

0

एक अनुबंध में शाब्दिक IEnumerable लौट मत करो, वहाँ प्रसिद्ध WCF IEnumerable bug

3

<system.web/> में इस लाइन जोड़ें:

<httpRuntime maxRequestLength="102400" executionTimeout="3600" /> 
+0

मुझे सहेजा गया है। धन्यवाद! – wcm

0

हाँ, मैं एक ही समस्या यहाँ था और इसके साथ कार्यसूची था उन वस्तुओं को लौटाना जिनके पास enum मूल्य था। DataMember को एक int और सब कुछ काम करने के लिए बदल दिया।

0

इंटरफ़ेस विधि के कार्यान्वयन के ऊपर [OperationBehavior()] सेट करने का प्रयास करें।

0

मैं का उपयोग करते समय 'उपज वापसी' मेरे DataContract प्रकार से मैप किया गया वस्तुओं का एक गणन का निर्माण करने के लिए इस त्रुटि मिला है।

उपज परिणामों पर ToList/ToArray पर कॉल करने से समस्या ठीक हो गई और सेवा कॉल सही तरीके से काम किया।

10

आप के साथ WCF + (एफई + POCO) काम कर रहे हैं तो सेट करें, जिसका

ObjectContext.ContextOptions.LazyLoadingEnabled = false; 
ObjectContext.ContextOptions.ProxyCreationEnabled = false; 
+0

बहुत बहुत धन्यवाद। तुमने मुझे खुद को शूटिंग से बचाया! – Dragan

+0

या 'ऑटोमैपर' का उपयोग करें, इस मामले में आप केवल लक्षणों को हल करने से बचें। –

3

Enums एक DataContract विशेषता, किसी भी वर्ग की तरह होता है, लेकिन enum मूल्यों पर DataMember गुण माना जाता नहीं कर रहे हैं उन्हें।

उन्हें EnumMember के लिए परिवर्तित करें और आप इस गूढ़ त्रुटि मिल रही बंद कर देंगे।

+0

यह एक चाल है: डी –

संबंधित मुद्दे