ভিয়েটিআইইনডিল অ্যাপ্লিকেশনগুলি ব্যবহার করে চাইল্ড ওয়েব অ্যাপ্লিকেশনে ওয়েবকনফিগের উত্তরাধিকার এড়িয়ে চলুন


153

আমি যুক্ত করার চেষ্টা করছি

<location inheritInChildApplications="false">

আমার পিতামাতার ওয়েব অ্যাপ্লিকেশনের ওয়েবকনফিগে কিন্তু এটি কাজ করছে বলে মনে হচ্ছে না।

আমার বাবা-মার web.configরয়েছে:

<configuration>
    <configSections>
    </configSections>

    // 10 or so custom config sections like log4net, hibernate,

    <connectionStrings>
    </connectionStrings>

    <appSettings>
    </appSettings>

    <system.diagnostics>
    </system.diagnostics>

    <system.web>
         <webParts>
         </webParts>
         <membership>
         </membership>

         <compilation>
         </compilation>
    </system.web>

    <location ..>
    <system.web>
        </system.web>
    </location>

    <system.webServer>
    </system.webServer>

আমার শিশু ওয়েব অ্যাপ্লিকেশনটি আইআইএস-এ একটি অ্যাপ্লিকেশন হিসাবে সেটআপ করা হয়েছে এবং পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত web.configযা সমস্যা সৃষ্টি করছে।

আমি ঠিক কোথায় রাখা উচিত

<location inheritInChildApplications="false">

সুতরাং এটি সমস্ত বিভিন্ন ওয়েবকনফিগ সেটিংস উপেক্ষা করে?

উত্তর:


203

পূর্ববর্তী উত্তরের মন্তব্যকারী হিসাবে উল্লেখ করা হয়েছে, আপনি কেবল লাইনটি যুক্ত করতে পারবেন না ...

<location path="." inheritInChildApplications="false">

... শুধু নিচের <configuration>। পরিবর্তে, আপনাকে পৃথক ওয়েবকনফিগ বিভাগগুলি মোড়াতে হবে যার জন্য আপনি উত্তরাধিকার অক্ষম করতে চান। উদাহরণ স্বরূপ:

<!-- disable inheritance for the connectionStrings section -->
<location path="." inheritInChildApplications="false">
   <connectionStrings>
   </connectionStrings>
</location>

<!-- leave inheritance enabled for appSettings -->
<appSettings>
</appSettings>

<!-- disable inheritance for the system.web section -->
<location path="." inheritInChildApplications="false">
   <system.web>
        <webParts>
        </webParts>
        <membership>
        </membership>

        <compilation>
        </compilation>
      </system.web>
 </location>

যদিও <clear />কিছু কনফিগারেশন বিভাগের জন্য কাজ করতে পারে, এমন কিছু কিছু রয়েছে যার পরিবর্তে একটি <remove name="...">নির্দেশিকা প্রয়োজন এবং এখনও অন্যরা সমর্থন করে না বলে মনে হয়। এই পরিস্থিতিতে এটি সেট করা সম্ভবত উপযুক্ত inheritInChildApplications="false"


11
এটি অন্য উপায়ে করা কি সম্ভব? আমি আশ্চর্যজনক মনে করি যে আমাকে পিতামাতাকে আপডেট করতে হবে, যখন সন্তানের সিদ্ধান্ত হয় যে সেটিংস উত্তরাধিকার সূত্রে প্রাপ্ত হওয়া উচিত কিনা।
নবেলফারিড

@নাবেলফারিড - আমি সম্পূর্ণরূপে একমত কোনও জটিল ওয়েব.কনফিগের সাহায্যে নেট নেট অ্যাপ্লিকেশনের ভিতরে যদি আপনার ওয়ার্ডপ্রেস ব্লগ থাকে তবে এটি সাফ করার বা উত্তরাধিকার রোধের ক্ষেত্রে প্রচুর ব্যথা হতে পারে। আমি মনে করি সম্পূর্ণ 'লোকেশন' সিস্টেমটি ভাগ করা হোস্টদের সুরক্ষার আশেপাশে আরও বেশি নকশাকৃত করা হয়েছে যে সামঞ্জস্যতার কারণে বেশিরভাগ লোকেরা এখানে নিজেকে সন্ধান করছে
সাইমন_উইভার

এটা আমার কাজ করে না? কোন চিন্তা? আমি একটি ডাব্লুসিএফ পরিষেবা করেছি যার এসআইটি ডাটাবেস সংযোগে প্যারেন্ট কনফিগার সেট আছে। আমার একই পরিষেবাতে অন্য একটি ফোল্ডার রয়েছে যা "কিউএ" বলে এবং এটিতে ওয়েব কোডফাইগ সহ এসআইটির মতো একই ডাব্লুসিএফ পরিষেবা ফাইল রয়েছে তবে ডাটাবেস কিউএ-তে নির্দেশ করছে। আমি যখন "কিউএ" ফোল্ডারের মধ্যে ডাব্লুসিএফ পরিষেবাটি কল করি তখন এটি প্যারেন্ট কনফিগারেশন থেকে কেবল সংযোগ নেয় (এমনকি আমি <লোকেশন> ট্যাগও দিই)। সমস্যাটি কি হবে দয়া করে আমাকে জানান।
সুপেরাচু

@ নিকসিসিল কীভাবে আইআইএস 6 এ এটি অর্জন করব? উপাদানটির inheritInChildApplicationsজন্য বৈধ পরামিতি হিসাবে গ্রহণ করা হচ্ছে না <location />। আমার ওয়েবসাইটটি শেয়ারপয়েন্ট (2007) চলছে। আমি এই ওয়েবসাইটের অধীনে ভার্চুয়াল ডিরেক্টরিতে একটি অ্যাপ্লিকেশন তৈরি করেছি, এটির নিজস্ব অ্যাপ্লিকেশন পুল দ্বারা পরিচালিত। তবুও, আমি শেয়ারপয়েন্টের কনফিগারেশন এবং এই অ্যাপ্লিকেশনটির মধ্যে দ্বন্দ্বের মুখোমুখি হয়েছি। সার্ভার ফল্ট এ পোস্ট করা এই প্রশ্নটি দেখুন ।
ওয়েব ব্যবহারকারী

1
আমার অ্যাপ্লিকেশন যা আমি একটি ওয়েবসাইটের শিশু হিসাবে তৈরি করেছি তা এখনও পিতামাতার ওয়েবসাইট থেকে ডিএলএল লোড করতে চায়। স্পষ্টতই, আমি <location>রানটাইমের জন্য ব্যবহার করতে পারি না ...
ফ্রান্সিস ডুকারমে

65

এটি সরাসরি রুট <configuration>নোডের নীচে যেতে হবে এবং আপনাকে এই জাতীয় পথ নির্ধারণ করতে হবে:

<?xml version="1.0"?>
<configuration>
    <location path="." inheritInChildApplications="false"> 
        <!-- Stuff that shouldn't be inherited goes in here -->
    </location>
</configuration>

কনফিগারেশন উত্তরাধিকার পরিচালনা করার একটি ভাল উপায় হ'ল আপনি <clear/>যেখানেই উত্তরাধিকারী হতে চান না সেখানে চাইল্ড কনফিগারেশনে একটি ব্যবহার করুন । সুতরাং আপনি যদি প্যারেন্ট কনফিগারেশনের সংযোগের স্ট্রিং উত্তরাধিকারী না করতে চান তবে আপনি এই জাতীয় কিছু করতে হবে:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
        <clear/>
        <!-- Child config's connection strings -->
    </connectionStrings>
</configuration>

17
আমি এই ত্রুটিটি পেয়েছি "কনফিগারেশন বিভাগ 'কনফিগারেশনগুলি' পড়তে পারা যায় না কারণ এটি আমার পিতামাতার ওয়েবকনফাইগ ফাইলে একটি বিভাগের ঘোষণা অনুপস্থিত।
ব্ল্যাঙ্কম্যান

আপনি নিজের কনফিগারেশনটিতে <লোকেশন> উপাদানটি পোস্ট করতে পারেন? আমি আমার সম্পাদনাটিও যাচাই করে দেখব যে আপনি যা করার চেষ্টা করছেন তার জন্য <পরিষ্কার /> আরও ভাল উপায় হতে পারে।
অ্যান্ড্রু হরে

6
আপনি যখন <কনফিগারেশন> এর নীচে রাখেন তখন এটি কাজ করে না। আপনি <system.web> নোডকে মোড়কে বলতে পারেন তবে আপনি এটি কেবল এটির মতো রুটে রাখতে পারবেন না।
PositiveGuy

আপনি যদি এটি দ্বিতীয় কনড হিসাবে <কনফিগারেশন> এর নীচে রাখেন তবে আপনি "উত্তেজনাপূর্ণ অ্যাপ্লিকেশন বৈশিষ্ট্যাবলী ঘোষিত হয়নি" get সুতরাং এটি ওয়েবকনফাইগের সেই স্তরে কোনও বৈধ বৈশিষ্ট্য নয়। সুতরাং আপনি কিভাবে এটি কাজ করতে পারেন?
PositiveGuy

12
-1: আমি এটিও নিশ্চিত করতে পারি যে উপরে বর্ণিত অবস্থান উপাদান ব্যবহার করা কার্যকর হয় না।
অ্যাড্রিয়ান গ্রিগোর

23

আমি সব কিছু এতে রেখেছি:

<location path="." inheritInChildApplications="false">
....
</location>

ছাড়া: <configSections/>, <connectionStrings/>এবং <runtime/>

এমন কিছু মামলা রয়েছে যখন আমরা কিছু বিভাগ থেকে উত্তরাধিকারী হতে চাই না <configSections />, তবে আমরা <section/>ট্যাগ করতে পারি না <location/>, তাই আমাদের একটি তৈরি করতে হবে <secionGroup />এবং আমাদের অযাচিত বিভাগগুলি সেই গোষ্ঠীতে রাখতে হবে। বিভাগ গ্রুপগুলি পরে কোনও লোকেশন ট্যাগে সন্নিবেশ করা যায়।

সুতরাং আমাদের এটি পরিবর্তন করতে হবে:

<configSections>
  <section name="unwantedSection" />
</configSections>

মধ্যে:

<configSections>
  <sectionGroup name="myNotInheritedSections">
    <section name="unwantedSection" />
  </sectionGroup>
</configSections>

<location path="." inheritInChildApplications="false">
    <myNotInheritedSections>
        <unwantedSection />
    </myNotInheritedSections>
</location>

আমার কাস্টম বিভাগ রয়েছে
কিকিনেট

এটি আমার সমস্যা সমাধান করেছে। আমার EF6.1.3 এর সাথে একটি ওয়েব অ্যাপ্লিকেশন ছিল এবং EF5 সহ চাইল্ড ওয়েব অ্যাপ। চাইল্ড ওয়েব অ্যাপ্লিকেশন আপগ্রেড করা প্রশ্নটির বাইরে ছিল, সুতরাং আমাকে উভয়কেই কাজ করতে এই কৌশলটি ব্যবহার করতে হয়েছিল এবং এটি কার্যকর হয়েছিল। আমি এই উদাহরণে অনুসরণ পরিবর্তন myNotInheritedSectionsকরতে ef6Privateএবং unwantedSectionহয় entityFrameworkঅধ্যায়।
মোহাম্মদ নুরুর

আমার কাজ করছে না কেন আপনি সহায়তা করতে পারেন, আমার কোডটি এখানে রয়েছে <configSections> <sectionGroup name="ef6Private"> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </sectionGroup> </configSections> <location path="." inheritInChildApplications="false"> <ef6Private> <entityFramework /> </ef6Private> </location>
asteriskdothmg

9

আমরা আমাদের বিকাশের একটি পরিবেশে সাম্প্রতিক কোড প্রকাশের পরে এর সাথে সম্পর্কিত একটি ত্রুটি পাচ্ছিলাম। আমাদের কাছে একটি অ্যাপ্লিকেশন রয়েছে যা অন্য একটি অ্যাপ্লিকেশনের শিশু। এই সম্পর্কটি গতকাল পর্যন্ত YEARS এর জন্য দুর্দান্ত কাজ করেছে।

সমস্যাটি:
নকল কী প্রবেশের কারণে আমরা একটি হলুদ স্ট্যাক ট্রেস ত্রুটি পেয়েছি। এটি কারণ শিশু এবং পিতামাতার অ্যাপ্লিকেশনগুলির জন্য ওয়েবকনফাইগ উভয়েরই এই কী ছিল। কিন্তু এটি বহু বছর ধরে এই রকম পরিবর্তন ছাড়াই বিদ্যমান ছিল। হঠাৎ কেন এটি এখন একটি ইস্যু?

সমাধান:
কী কখনই কোনও সমস্যা হয়নি তার কারণ হ'ল চাবি এবং মানগুলি সর্বদা একই ছিল। গতকাল আমরা সংযোগের স্ট্রিংয়ের মধ্যে অ্যাপ্লিকেশন নাম অন্তর্ভুক্ত করতে আমাদের এসকিউএল সংযোগের স্ট্রিংগুলি আপডেট করেছি। এটি স্ট্রিংটিকে অনন্য করে তোলে এবং হঠাৎ করে ব্যর্থ হতে শুরু করে।

এর সঠিক কারণ নিয়ে কোনও গবেষণা না করে, আমাকে ধরে নিতে হবে যে যখন শিশু অ্যাপ্লিকেশনটি পিতামাতার ওয়েব কোডফাইগ মানগুলিতে উত্তরাধিকার সূত্রে প্রাপ্ত হয়, তখন এটি অভিন্ন কী / মান জুটিকে উপেক্ষা করে।

আমরা এটির মতো সংযোগের স্ট্রিং মোড়ানো করে এটি সমাধান করতে সক্ষম হয়েছি

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <!-- Updated connection strings go here -->
        </connectionStrings>
    </location>

সম্পাদনা: আমি এটি উল্লেখ করতে ভুলে গিয়েছিলাম যে আমি এটি পেরেন্টস ওয়েবকনফাইগে যুক্ত করেছি। আমাকে সন্তানের ওয়েবকনফিগটি সংশোধন করতে হবে না।

এই বিষয়ে প্রত্যেকের সহায়তার জন্য ধন্যবাদ, আমাদের বাটগুলি সংরক্ষণ করে।


6

যদি (আমি বুঝতে পেরেছি) আপনি যদি আপনার শিশু অ্যাপ্লিকেশনটির ওয়েব কনফিগারেশনে উত্তরাধিকারকে সম্পূর্ণরূপে অবরুদ্ধ করার চেষ্টা করছেন, আমি আপনাকে ওয়েবকনফাইগের ট্যাগটি ব্যবহার এড়াতে পরামর্শ দিই। পরিবর্তে একটি নতুন অ্যাপপুল তৈরি করুন এবং অ্যাপ্লিকেশন হোস্টকনফিগ ফাইলটি সম্পাদনা করুন (% WINDIR% \ System32 \ inetsrv \ কনফিগারেশন এবং% WINDIR% ys SysWOW64 \ inetsrv \ কনফিগারেশনে)। আপনাকে কেবল আপনার অ্যাপপুলের জন্য এন্ট্রি সন্ধান করতে হবে এবং enableConfigurationOverride="false"নিম্নলিখিত উদাহরণের মতো বৈশিষ্ট্য যুক্ত করতে হবে :

<add name="MyAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" enableConfigurationOverride="false">
    <processModel identityType="NetworkService" />
</add>

এটি মাইএপপুল দ্বারা পরিবেশন করা অ্যাপ্লিকেশনগুলিতে কনফিগারেশন উত্তরাধিকার এড়িয়ে যাবে।

Matteo


1
এমএসডিএন বলছে 'মিথ্যা হলে, ওয়েব অ্যাপ্লিকেশন পুলের জন্য ওয়েবকনফাইগ ফাইলগুলির সমস্ত সেটিংস উপেক্ষা করা হবে' এবং এটি আপনাকে কী বোঝায় তার মতো বলে মনে হচ্ছে না। আমি এটি সঠিক উত্তর হতে পছন্দ করতাম তবে আমি এটি কাজ করতে পারি না almost প্রায় আমার কাছে দেখে মনে হচ্ছে এই সেটিংটির অর্থ 'এই অ্যাপপুলের জন্য কোনও স্থানীয় ওয়েবকনফিগকে পুরোপুরি অস্বীকার করুন'
সাইমন_উইভার

সুতরাং মূলত এই অ্যাপ্লিকেশন পুলের অধীনে থাকা অ্যাপ্লিকেশনগুলির কোনও ওয়েব.কমফাইগ ফাইল ছাড়াই কাজ করার কথা রয়েছে? আমি বুঝতে পারি যে "ফেলা অবহেলিত ওয়েবকনফিগ" মূল ফোল্ডারের মধ্যে একটি in আমি এটি সফলভাবে কয়েকবার ব্যবহার করেছি। নিশ্চিত করুন যে শিশু অ্যাপ্লিকেশনটি রুট ওয়েবকনফিগের কনফিগারেশনের উপর নির্ভর করে না (পৃথক মূল ফোল্ডারে শিশু অ্যাপটি চালানোর চেষ্টা করুন)।
মাত্তেও সানজিটা 14

1
আপনি এই পৃষ্ঠায় # 2 পদ্ধতিটিও পরীক্ষা করতে পারেন, যদিও আমি এটি পরীক্ষা করেছি না iislogs.com/steveschofield/2009/09/20/…
মাত্তেও সানজিটা

আমার সন্তানের অ্যাপ্লিকেশনটি মূলত পিতামাতার অ্যাপ্লিকেশনটির একটি অনুলিপি। আমি রাখতে সক্ষম হতে চাই /previewযাতে লোকেরা এটি লাইভ করার আগে একটি নতুন সংস্করণ পরীক্ষা করতে পারে। প্রত্যেকেই সর্বদা <location>এই সমস্যাটি সমাধানের জন্য পরামর্শ দেয় তাই আপনার পোস্টটি পড়ে আমি খুব আগ্রহী। তবে এটি The entry 'default' has already been added.ব্যবহার করার পরেও এটি একটি অ্যাপফ্যাব্রিক সম্পর্কিত কনফিগার এন্ট্রির জন্য অভিযোগ করেenableConfigurationOverride="false"
সাইমন_উইভার

এছাড়াও যদি আমি enableConfigurationOverride="false"আমার মূল অ্যাপ্লিকেশনটি সেট করি তবে এটি সম্পূর্ণরূপে মূল অ্যাপ্লিকেশনটিকে মেরে ফেলবে এবং এটি এমনকি কাজ করবে না :-(
সাইমন_উইভার

2

এটি মাইক্রোসফ্ট এর পৃষ্ঠাতে location ট্যাগটিতে : http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx

এটি কিছু লোকের পক্ষে সহায়ক হতে পারে।


5
এই লিঙ্কটি মারা গেছে। এটি ব্যবহার করে দেখুন: এমএসডিএন.মাইক্রোসফটকম /en-us/library/b6x6shw7%28v=vs.100%29.aspx
রায়ান

1

আমরা আমাদের অ্যাপগুলির মধ্যে একটিতে সদৃশ কনফিগারেশন নির্দেশনা সম্পর্কে ত্রুটি পেয়েছি getting তদন্তের পরে দেখে মনে হচ্ছে এটি এই সমস্যার কারণেই ।

সংক্ষেপে, আমাদের মূল ওয়েবসাইটটি এএসপি.এনইটি ৩.৫ (যা নির্দিষ্ট লাইব্রেরির সাথে ২.০ হয়) এবং আমাদের একটি সাব-অ্যাপ্লিকেশন রয়েছে যা এএসপি.নেট ৪.০।

ওয়েব কোডফিগ উত্তরাধিকারের কারণে ASP.NET 4.0 সাব-অ্যাপ্লিকেশনটি প্যারেন্ট এএসপি.নেট 3.5 অ্যাপ্লিকেশনটির ওয়েবকনফিগ ফাইলটি উত্তরাধিকার সূত্রে পরিণত করে।

তবে, এএসপি.নেট application.০ অ্যাপ্লিকেশনটির গ্লোবাল (বা "রুট") ওয়েবকনফিগ, যা সি: \ উইন্ডোজ \ মাইক্রোসফট.নেট \ ফ্রেমওয়ার্ক \ v4.0.30319 \ কনফিগার \ ওয়েবকনফিগ এবং সি: \ উইন্ডোজ \ মাইক্রোসফ্টে থাকে। নেট \ ফ্রেমওয়ার্ক 64 \ v4.0.30319 \ কনফিগার \ ওয়েবকনফিগ (আপনার স্বাক্ষীর উপর নির্ভর করে), ইতিমধ্যে এই কনফিগার বিভাগগুলি রয়েছে।

ASP.NET 4.0 অ্যাপটি এরপরে রুট ASP.NET 4.0 ওয়েবকনফিগ এবং প্যারেন্ট ওয়েবকনফিগ (একটি এএসপি.নেট 3.5 অ্যাপের জন্য একটি) একত্রিত করার চেষ্টা করে এবং নোডে সদৃশ হয়ে যায় into

একমাত্র সমাধান আমি সন্ধান করতে পেরেছি তা হল পিতামাতার ওয়েবকনফিগ থেকে কনফিগার বিভাগগুলি অপসারণ করা এবং তারপরে হয়

  1. আপনার মূল অ্যাপ্লিকেশনটিতে আপনার প্রয়োজন নেই বা আপনি যদি তা করেন তবে তা নির্ধারণ করুন
  2. মূল অ্যাপ্লিকেশনটিকে ASP.NET 4.0 এ আপগ্রেড করুন (যাতে এটি রুট ওয়েবকনফিগের কনফিগারেশনগুলিতে অ্যাক্সেস পায়)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.