2010-09-20 4 views
10

मैं x86 आधारित प्रोजेक्ट से मैटलैब कोड का संदर्भ दे सकता हूं, लेकिन x64 प्रोजेक्ट से नहीं।मैं 32-बिट मोड में डब्ल्यूसीएफ सेवा पुस्तकालय कैसे संकलित करूं?

मैं डब्ल्यूसीएफ सेवा को "कोई भी CPU" के रूप में बना सकता हूं, लेकिन x86 नहीं। जब मैं केवल 86 के रूप में निर्माण करने के लिए प्रयास करते हैं, यह निम्न त्रुटि देता है:

---start error--- 
System.BadImageFormatException: Could not load file or assembly 'file:///D:\backtest\WcfServiceLibrary.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format. 
---end error--- 

इस प्रकार, मैं अटक कर रहा हूँ: कैसे पृथ्वी पर मैं Matlab WCF के माध्यम से कॉल प्रदान करते हैं? यह डेवलपर्स एक्सओआर के कुछ अजीब रूप की तरह है।

32-बिट मोड में डब्ल्यूसीएफ सेवा पुस्तकालय को संकलित करने के लिए या (बी) इस मुद्दे के आसपास काम करने के तरीके के बारे में कोई विचार?

मैं Win7 x64 है, MSVS 2010

+1

डिफ़ॉल्ट रूप से, 'WcfSvcHost.exe', 64-बिट है, इसलिए यह केवल 64 से चलाता है बिट असेंबली और 32-बिट असेंबली के साथ त्रुटियों को फेंक देगा। यदि आप 'WcfSvcHost.exe' का उपयोग करके होस्टिंग से बच सकते हैं, तो आप 32-बिट असेंबली का उपयोग करने के प्रयास से जुड़े त्रुटियों से बचें। डब्ल्यूसीएफ सेवा की मेजबानी करने के तरीके हैं जो 'WcfSvcHost.exe' से बचाते हैं, जो मूल समस्या हल करता है। – Contango

उत्तर

9

WcfServiceLibrary एक DLL है, इसलिए के रूप में "किसी भी सीपीयू" का निर्माण किया जाना चाहिए। अन्य सभी डीएलएल को होस्ट करने वाली केवल EXE परियोजनाओं को आवश्यकतानुसार "x86" या "x64" के रूप में चिह्नित करने की आवश्यकता है। इस मामले में EXE कौन सा प्रोजेक्ट है?

+0

ग्राहक EXE है। ईईई डब्लूसीएफ वेब सेवा के कार्यों को कॉल करता है, डब्ल्यूसीएफ सेवा बदले में मैटलैब कार्यों को बुलाती है। मैं समझता हूं कि डीएलएल को "कोई भी सीपीयू" के रूप में चिह्नित करने की आवश्यकता है, लेकिन यदि मैं ऐसा करता हूं, तो मैं मैटलैब क्लास को मैटलैब कार्यक्षमता को कॉल करने के लिए तत्काल नहीं कर सकता क्योंकि यह एक त्रुटि देता है। – Contango

+0

संभवतः ग्राहक वास्तव में डब्ल्यूसीएफ सेवा के लिए प्रॉक्सी का उपयोग कर रहा है। तो डब्ल्यूसीएफ सेवा - आईआईएस, एक कंसोल ऐप, या विंडोज सेवा की मेजबानी क्या है? –

+0

समस्या हल हो गई। मुझे सही रास्ते पर रखने के लिए धन्यवाद।देखें: http://stackoverflow.com/questions/3755761/i-cant-compile-a- मानक- wcf-service-library-in-x86-format। मेरे पास दो परियोजनाओं के साथ समाधान था: एक परियोजना एक कंसोल ऐप थी जो डब्ल्यूसीएफ सेवा पुस्तकालय से सेवाओं का उपभोग करती है, और एक परियोजना डब्ल्यूसीएफ सेवा पुस्तकालय थी। जब मैं कंसोल ऐप चलाता था, तो उसने स्वचालित रूप से "WcfSvcHost" के साथ होस्ट की गई सेवा को निष्पादित किया। मैंने दिखाया है कि यदि मैं अपनी 32-बिट डब्ल्यूसीएफ सेवा लाइब्रेरी को एक अलग विधि, अर्थात् आईआईएस का उपयोग करके होस्ट करता हूं, तो यह किसी भी अपवाद को फेंक नहीं देगा क्योंकि यह 32-बिट मोड में संकलित है। – Contango

24

आपकी समस्या वास्तव में डब्ल्यूसीएफ टेस्ट क्लाइंट शिकायत कर रही है कि आपकी डब्ल्यूसीएफ सेवा लाइब्रेरी 32 बिट है। ऐसा इसलिए है क्योंकि डिफ़ॉल्ट रूप से, डब्ल्यूसीएफ टेस्ट क्लाइंट हमेशा 64 बिट मोड में चलता है।

मुझे इस blog पर निम्न चरणों को मिला जो डब्लूसीएफ टेस्ट क्लाइंट 32 बिट मोड में चलाता है - और इसलिए आपको आपके द्वारा पोस्ट की गई त्रुटि दिखाई नहीं देगी।

  1. कॉपी WcfSvcHost.exe और सी से WcfTestClient.exe: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ Common7 \ IDE एक स्थानीय निर्देशिका के लिए। निश्चित रूप से इस फ़ाइल की बैकअप प्रति रखें। निर्देशिका जहां WcfSvcHost की अपनी प्रतिलिपि स्थित है
  2. "सीडी" -

  3. एक दृश्य स्टूडियो 2010 कमांड प्रॉम्प्ट (> Visaul स्टूडियो 2010 प्रारंभ मेनू से किसी एक लिंक) की शुरुआत करें।

  4. निष्पादित आदेश "corflags/32bit +/बल WcfSvcHost.exe"

  5. आदेश निष्पादित "corflags/32bit +/बल WcfTestClient.exe"

  6. कॉपी फ़ाइलें वापस जहां यह पाया करने के लिए ।

अब आप अपने WcfSvcHost और WcfTestClient 32 बिट मोड में चल रहा हो जाएगा, और आप अपने त्रुटि नहीं मिलेगा

+0

संबंधित [स्क्रीन के साथ आलेख] (http: //coding.abel। nu/2012/04/debugging-a-wcf-service-use-a-32-bit-dll /) का कहना है कि मूल .exe को संरक्षित कैसे करें और होस्ट और क्लाइंट ऐप्स की 32 बिट प्रतियों का उपयोग करने के लिए VS को कॉन्फ़िगर कैसे करें। – quetzalcoatl

+0

आपको ध्यान रखना चाहिए कि इस चरण का पालन करने के बाद, 'WcfSvcHost' और' WcfTestClient' हमेशा x86 में चलेंगे। – Diego

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