2012-12-28 16 views
5

कृपया इस प्रश्न को अत्यधिक नौसिखिया से क्षमा करें। मुझे कहीं और जवाब नहीं मिला।डब्ल्यूसीएफ और ईएफ - मेजबान को अपनी कनेक्शन स्ट्रिंग का उपयोग करने के लिए मजबूर कैसे करें

मैं एंटिटी फ्रेमवर्क और डब्ल्यूसीएफ का उपयोग कर एक समाधान लिख रहा हूं। मैं कई अलग-अलग ग्राहकों को लिखूंगा। मैंने एंटीटी फ्रेमवर्क प्रोजेक्ट के app.config और WCF होस्ट की app.config फ़ाइल दोनों में डेटाबेस कनेक्शन स्ट्रिंग रखी है।

मेजबान वर्ग में, मैंने एक विधि के साथ एक सरल परीक्षण सेवा अनुबंध लिखा था जो डेटाबेस से सभी ग्राहकों को प्राप्त करता है (ईएफ से), जिसे GetAllCustomers() कहा जाता है। मैंने मेजबान के GetAllCustomers() को कॉल करने के लिए एक सरल कंसोल क्लाइंट ऐप लिखा और कंसोल के सभी ग्राहकों के पहले और अंतिम नाम लिखते हैं।

जब मैं ग्राहक चल कोशिश की, मैं एक त्रुटि है कि कहते हैं, "कोई कनेक्शन स्ट्रिंग 'TRS11Entities' नाम आवेदन कॉन्फ़िग फ़ाइल में पाया जा सकता है।

मैं ग्राहक सांत्वना एप्लिकेशन के लिए कनेक्शन स्ट्रिंग कॉपी करते हैं मिला app.config फ़ाइल, यह ठीक काम करता है, लेकिन अगर मैं इसे टिप्पणी करता हूं, तो यह फिर से काम नहीं करता है।

चूंकि डब्ल्यूसीएफ होस्ट डेटाबेस से बात कर रहा है, क्लाइंट सीधे नहीं, मुझे समझ में नहीं आता क्यों क्लाइंट को एक कनेक्शन स्ट्रिंग की आवश्यकता होगी। मैं केवल अनुमान लगा सकता हूं कि कनेक्शन स्ट्रिंग को क्लाइंट से डब्ल्यूसीएफ मेजबान को इकाई फ्रेमवर्क में ले जाया जा रहा है। मैं डब्लूसीएफ होस्ट को .NET बता सकता हूं, "हिरन यहां रुकती है! मेरे app.config की कनेक्शन स्ट्रिंग का उपयोग करें और इस जानकारी के लिए क्लाइंट को परेशान करना बंद करें! "

यदि यह महत्वपूर्ण है, तो मैं दृश्य स्टूडियो प्रो 2012 का उपयोग कर रहा हूं, सी # में लिखी गई सभी परियोजनाओं और वी 4.5 .NET ढांचे को लक्षित करने के साथ।

WCF सेवा परियोजना में app.config से

:

<configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="TRS11Entities" connectionString="metadata=res://*/TRS11Model.csdl|res://*/TRS11Model.ssdl|res://*/TRS11Model.msl;provider=FirebirdSql.Data.FirebirdClient;provider connection string='initial catalog=&quot;C:\Program Files (x86)\TRS11\Data\DATA1100.FDB&quot;;user id=sysdba;password=masterkey;data source=localhost'" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

app.config से ग में:

<system.serviceModel> 
    <services> 
     <service name="OrsonServiceLibrary.Service1"> 
     <endpoint address="localhost" binding="basicHttpBinding" name="TRS11Entities" 
      contract="OrsonServiceLibrary.IService1"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8733/Design_Time_Addresses/OrsonServiceLibrary/Service1/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, 
      set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
    <connectionStrings> 
    <add name="TRS11Entities" connectionString="metadata=res://*/TRS11Model.csdl|res://*/TRS11Model.ssdl|res://*/TRS11Model.msl;provider=FirebirdSql.Data.FirebirdClient;provider connection string='character set=NONE;data source=localhost;initial catalog=&quot;C:\Program Files (x86)\TRS11\Data\DATA1100.FDB&quot;;user id=sysdba;password=masterkey'" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
app.config से इकाई की रूपरेखा परियोजना में

onsole क्लाइंट ऐप: GetAllCustomers के लिए

<system.serviceModel> 
    <client> 
     <endpoint address="http://localhost:8000/Service1" contract="OrsonServiceLibrary.IService1" binding="basicHttpBinding" /> 
    </client> 
    </system.serviceModel> 

    <!--<connectionStrings> 
    <add name="TRS11Entities" connectionString="metadata=res://*/TRS11Model.csdl|res://*/TRS11Model.ssdl|res://*/TRS11Model.msl;provider=FirebirdSql.Data.FirebirdClient;provider connection string='character set=NONE;data source=localhost;initial catalog=&quot;C:\Program Files (x86)\TRS11\Data\DATA1100.FDB&quot;;user id=sysdba;password=masterkey'" providerName="System.Data.EntityClient" /> 
    </connectionStrings>--> 

संहिता() WCF सेवा परियोजना में समारोह:

public HashSet<CUSTOMER> GetAllCustomers() 
{ 
    var db = new TRS11Entities(); 

    HashSet<CUSTOMER> TheCusts = new HashSet<CUSTOMER>(); 

    foreach (CUSTOMER c in db.CUSTOMERs) 
    { 
     TheCusts.Add(c); 
    } 

    return TheCusts; 
} 

कंसोल ग्राहक एप्लिकेशन कोड:

static void Main(string[] args) 
{ 
    Console.WriteLine("Press Enter to begin."); 
    Console.ReadLine(); 

    Service1 MyService = new Service1(); 

    HashSet<CUSTOMER> cl = MyService.GetAllCustomers(); 

    foreach (CUSTOMER c in cl) 
    { 
     Console.WriteLine(c.CUSTFNAME + " " + c.CUSTLNAME); 
    } 

    Console.WriteLine("Press Enter to exit."); 
    Console.ReadLine(); 
} 

होस्ट आवेदन कोड:

class Program 
{ 
    static void Main(string[] args) 
    { 
     ServiceHost hostA = null; 

     try 
     { 
      hostA = new ServiceHost(typeof(Service1)); 
      hostA.Open(); 

      Console.WriteLine(); 
      Console.WriteLine("Host started. Press Enter to terminate host."); 
      Console.ReadLine(); 

     } 
     finally 
     { 
      if (hostA.State == CommunicationState.Faulted) 
       hostA.Abort(); 
      else 
       hostA.Close(); 
     } 
    } 
} 

धन्यवाद, जो

+0

ओह, मैंने यह भी सोचा कि मैं उल्लेख करता हूं, अगर यह मायने रखता है ... मेरे पास डब्ल्यूसीएफ सेवा के लिए अभी तक एक होस्ट ऐप नहीं है। अब तक, यह सिर्फ एक डब्ल्यूसीएफ कक्षा पुस्तकालय है, और मैं परीक्षण के लिए डब्ल्यूसीएफ सेवा होस्ट में इसे होस्ट कर रहा हूं। -जो – JoeMjr2

+0

सिर्फ इसलिए कि मैंने सोचा था कि डब्ल्यूसीएफ सेवा होस्ट समस्या हो सकती है, मैं आगे बढ़ गया और सेवा होस्ट करने के लिए एक सरल मेजबान EXE लिखता हूं। मैंने मेजबान ऐप की app.config फ़ाइल में कनेक्शन स्ट्रिंग डाली है, लेकिन मुझे अभी भी त्रुटि मिलती है। – JoeMjr2

+1

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

उत्तर

2

कुछ मुझे बताता है कि आप वास्तव में प्रॉक्सी/चैनल का उपयोग करने के बजाय अपने क्लाइंट ऐप में सेवा का उदाहरण बना रहे हैं।

क्लाइंट ऐप कोड में सेवा 1 प्रकार क्या है? क्या यह OrsonServiceLibrary.Service1 है?

Service1 MyService = new Service1(); 

यदि हां, तो सिर्फ और Add Service Reference सेवा परियोजना के संदर्भ में निकल दें। यह प्रॉक्सी उत्पन्न करेगा, जिसका उपयोग आप अपनी सेवा तक पहुंचने के लिए कर सकते हैं।

+0

हाँ, वह था! मैंने सेवा संदर्भ बनाया था, लेकिन मैंने सेवा प्रोजेक्ट का संदर्भ भी जोड़ा था, और प्रॉक्सी के बजाय तत्काल था। धन्यवाद! – JoeMjr2

1

ग्राहक ऐप आपकी डब्ल्यूसीएफ सेवा से कनेक्शन नहीं पारित कर रहा है। मेरा अनुमान है कि आप अपने क्लाइंट ऐप में अपने डेटाबेस में एक अनौपचारिक कॉल कर रहे हैं। इससे त्रुटि दिखाई देगी और जब आप अपने कंसोल ऐप में कनेक्शन स्ट्रिंग जोड़ते हैं तो यह क्यों काम करता है।

उम्मीद है कि मदद करता है। कुछ कोड पोस्ट करें और हम और अधिक मदद करने में सक्षम हो सकते हैं।

+0

धन्यवाद। मैंने जो जोड़ा है, वह मेरे मूल प्रश्न के लिए मेरे कोड के प्रासंगिक भाग हैं जो मैंने जोड़ा है। अगर मुझे कोई अन्य कोड पोस्ट करना चाहिए तो मुझे बताएं। – JoeMjr2

0

कोड के बिना यह आपके प्रश्न का उत्तर बहुत कठिन बनाता है, हालांकि, मुझे संदेह है कि आपकी समस्या है कि आपके पास लाइब्रेरी ऐप कॉन्फ़िगरेशन फ़ाइल में आपकी कनेक्शन स्ट्रिंग है।यहां भेद यह है कि जब आप प्रोग्राम चलाते हैं तो सेटिंग्स निष्पादन असेंबली ऐप कॉन्फ़िगरेशन फ़ाइल से लोड की जाती हैं।

जांचें कि सेटिंग्स "MyApp। exe ​​ .config" फ़ाइल में हैं।

+1

यह एकाधिक पुस्तकालयों के लिए कॉन्फ़िगरेशन फ़ाइलों से संबंधित रुचि भी हो सकता है। http://stackoverflow.com/questions/5674971/app-config-for-a-class-library – Jake1164

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