সার্ভারে IncludExceptionDetailInFaults (সার্ভিস বিহেভিয়ারঅ্যাট্রিবিউট বা <serviceDebug> কনফিগারেশন আচরণ থেকে) চালু করুন


157

আমার একটি ডাব্লুসিএফ পরিষেবা রয়েছে যা নিখুঁতভাবে কাজ করে চলেছে, এবং কিছু পরিবর্তন হয়েছে এবং আমি কী জানি না।

আমি এই ব্যতিক্রম পাই:

System.ServiceModel.FaultException: সার্ভারটি অভ্যন্তরীণ ত্রুটির কারণে অনুরোধটি প্রক্রিয়াকরণে অক্ষম ছিল। ত্রুটি সম্পর্কে আরও তথ্যের জন্য, ক্লায়েন্টের কাছে ব্যতিক্রম তথ্যটি ফেরত পাঠাতে সার্ভারের ইনক্লুড এক্সেপশনডেটাইলইনফ্যাল্টগুলি (সার্ভিস বিহাইভিয়ারঅ্যাট্রিবিউট থেকে বা কনফিগারেশন আচরণ থেকে) চালু করুন বা মাইক্রোসফ্ট। নেট ফ্রেমওয়ার্ক 3.0 এসডি কে ডকুমেন্টেশন অনুসারে ট্রেসিং চালু করুন এবং সার্ভারের ট্রেস লগগুলি পরিদর্শন করুন।

এটি বিভ্রান্তিকর কারণ আমি চালাচ্ছি। নেট 4.0।

আমি কোথায় চালু করব IncludeExceptionDetailInFaults? আমি এটি খুঁজতে লড়াই করছি।

উত্তর:


265

আপনার ফাইলে কোনও আচরণের সংজ্ঞা দিন .config:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="debug">
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    ...
  </system.serviceModel>
</configuration>

তারপরে এই লাইনগুলি সহ আপনার পরিষেবাতে আচরণটি প্রয়োগ করুন:

<configuration>
  <system.serviceModel>
    ...
    <services>
      <service name="MyServiceName" behaviorConfiguration="debug" />
    </services>
  </system.serviceModel>
</configuration>

আপনি এটি প্রোগ্রামগতভাবে সেটও করতে পারেন। এই প্রশ্নটি দেখুন ।


1
হাই ওটিভেল, আমি আমার কেসগুলিতে বিভিন্ন সাইট এবং পরিষেবাদিযুক্ত নেস্টেড ফোল্ডার পেয়েছি। আমার পরিষেবাটি যে ফোল্ডারে থাকে এবং আমি ত্রুটি পাচ্ছি তা মূল ওয়েব অ্যাপ্লিকেশনের তুলনায় নেস্টিংয়ের তৃতীয় ডিগ্রীতে এবং আমি প্রতিটি সেবার জন্য ওয়েবকনফিগকে উত্সর্গ করেছি। আমি <সার্ভিসডিবগ অন্তর্ভুক্তএক্সেপশন ডেটেলআইএনএফএল্টস = "সত্য" /> যোগ করার জন্য সেই অনুসারে আমার সম্পর্কিত ওয়েব কোডফিগ পরিবর্তন করি। তবে আমি এখনও ত্রুটি পাচ্ছি। আমার কি সম্পূর্ণ ওয়েব অ্যাপ্লিকেশনটিতে সমস্ত ওয়েবকনফিগ পরিবর্তন করতে হবে?
ম্যাক্সেকারসন

2
@ অক্ষয়কুলকার্নি: নিশ্চিত নয়, আপনার ক্ষেত্রে আমার অভিজ্ঞতা নেই। আপনার পরিষেবাগুলিতে পরিষেবাবিবাহের ( প্রথমে গাগোগ্রা উত্তরটি পরীক্ষা করুন ) রেফারেন্স রয়েছে তা নিশ্চিত করুন । যদি এটি সমস্যার সমাধান না করে তবে দয়া করে এসও-তে একটি প্রশ্ন জিজ্ঞাসা করুন।
ওটিয়েল

1
@ ম্যাথেললক: উত্তর আপডেট হয়েছে। এছাড়াও, আপনার আরও বিশদ প্রয়োজন হলে <আচরণ> এবং <পরিষেবা>> পরীক্ষা করুন check
ওটিয়েল

1
ভিজ্যুয়াল স্টুডিও আমাকে বলেছে যে পরিষেবা বিহিবররা সিস্টেমের সরাসরি শিশু হতে পারে না serv সার্ভিসমোডেল। সমৃদ্ধ.কমের উত্তর দিয়ে গিয়ে শেষ।
অ্যান্ড্রুব

3
দ্রষ্টব্য: ভিএস2013 এটিতে মিথ্যাতে সেট করা ডিফল্ট ওয়েবকনফিগের মধ্যে <serviceDebug> ট্যাগ রাখে। যদি আপনি লক্ষ্য করেন না যে আমি না করেছি এবং উপরে এক্সএমএল যোগ করুন আপাতদৃষ্টিতে ফাইলের মধ্যে শেষটি কী জিতবে। আশা করি এটি কারও পক্ষে কার্যকর হবে useful
জেফ

63

এটি app.config ফাইলে রয়েছে।

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceDebug includeExceptionDetailInFaults="true"/>

9
যদি আপনি এটি আপনার সমস্ত পরিষেবায় প্রয়োগ করতে চান তবে <বিভাজন> এর নাম বৈশিষ্ট্য নির্ধারণ করবেন না (@ ওটিয়েল উত্তর হিসাবে)।
পাশেক

47

আপনি যদি কোড দ্বারা এটি করতে চান তবে আপনি এই জাতীয় আচরণটি যুক্ত করতে পারেন:

serviceHost.Description.Behaviors.Remove(
    typeof(ServiceDebugBehavior));
serviceHost.Description.Behaviors.Add(
    new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });

এটি আপনার ServiceHostবস্তুর উদাহরণে যুক্ত করুন: উদাহরণ:ServiceHost serviceHost = new ServiceHost(Program.serviceInstance);
ড্যানিয়েল বোনেটি

28

আপনি এটিকে [সার্ভিস বিহেভিয়ার] ট্যাগটিতে আপনার শ্রেণীর ঘোষণার উপরেও সেট করতে পারেন যা ইন্টারফেসের উত্তরাধিকার সূত্রে আসে

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyClass:IMyService
{
...
}

অমর নীল বহুল প্রচারের বিবরণ প্রকাশ্যে প্রকাশিত সংস্করণে প্রকাশ না করার ক্ষেত্রে সঠিক, তবে পরীক্ষার উদ্দেশ্যে এটি একটি কার্যকর সরঞ্জাম। ছেড়ে দেওয়ার সময় সর্বদা পিছিয়ে যান।


আমি এটি এমন একটি অ্যাপ্লিকেশনটিতে ব্যবহার করেছি যা ব্যাকএন্ডে চলে এবং কখনও প্রকাশ্যে দেখা যায় না, তাই এটি পুরোপুরি কাজ করে
AlbatrossCafe

4

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

 [ServiceContract]
public interface IService1
{
    [OperationContract]
    [FaultContract(typeof(ServiceData))]
    ForDataset GetCCDBdata();

    [OperationContract]
    [FaultContract(typeof(ServiceData))]
    string GetCCDBdataasXMLstring();


    //[OperationContract]
    //string GetData(int value);

    //[OperationContract]
    //CompositeType GetDataUsingDataContract(CompositeType composite);

    // TODO: Add your service operations here
}

  [DataContract]
public class ServiceData
{
    [DataMember]
    public bool Result { get; set; }
    [DataMember]
    public string ErrorMessage { get; set; }
    [DataMember]
    public string ErrorDetails { get; set; }
}

আপনার service1.svc.cs এ আপনি এটি ক্যাচ ব্লকে ব্যবহার করতে পারেন:

 catch (Exception ex)
        {
            myServiceData.Result = false;
            myServiceData.ErrorMessage = "unforeseen error occured. Please try later.";
            myServiceData.ErrorDetails = ex.ToString();
            throw new FaultException<ServiceData>(myServiceData, ex.ToString());
        }

এবং ক্লায়েন্ট অ্যাপ্লিকেশন এ নীচের কোড মত ব্যবহার করুন:

  ConsoleApplicationWCFClient.CCDB_HIG_service.ForDataset ds = obj.GetCCDBdata();

            string str = obj.GetCCDBdataasXMLstring();

        }

        catch (FaultException<ConsoleApplicationWCFClient.CCDB_HIG_service.ServiceData> Fex)
      {
          Console.WriteLine("ErrorMessage::" + Fex.Detail.ErrorMessage + Environment.NewLine);
          Console.WriteLine("ErrorDetails::" + Environment.NewLine + Fex.Detail.ErrorDetails);
          Console.ReadLine();
      }

এটি চেষ্টা করুন, সঠিক সমস্যাটি পেতে এটি নিশ্চিতভাবে সহায়তা করবে।


4
আপনার অন্তর্নিহিত ব্যতিক্রম বিশদটি প্রকাশ করা উচিত নয়। ক্লায়েন্ট এবং সার্ভারের মধ্যে ব্যতিক্রম আলাদা করার এবং পুরোপুরি এই পতাকাটির প্রয়োজনীয়তার পুরো উদ্দেশ্যটি হ'ল ক্লায়েন্টের কাছে ব্যতিক্রমী তথ্য উপলব্ধ করা রোধ করা। একজন দূষিত ব্যবহারকারী এই তথ্যটি আপনার পরিষেবাটি ব্যবহারের জন্য ব্যবহার করতে পারে! যদি আপনি বিকাশ করছেন তবে সম্পূর্ণ ব্যতিক্রম প্রচার করার জন্য বর্ণিত ইনক্লুডেক্সটেনশন ডেটইনএফএল্টস ব্যবহার করুন, বা স্থাপনার ক্ষেত্রে একটি স্ট্যাক ট্রেস এবং সম্পূর্ণ বিশদ বিবরণ দেওয়ার পরিবর্তে "ফাইল সংরক্ষণে অক্ষম" এর মতো একটি খুব প্রাথমিক ত্রুটি প্রদান করে একটি ফল্টেক্সেপশন উত্থাপন করুন ব্যতিক্রম।
অমর নীল

হাই .. আমার ক্ষেত্রে অন্য সমস্ত পরিষেবা ফাংশন কল করা হচ্ছে যা আমি ফাইলটি সংরক্ষণ করতে ব্যবহার করছি সেই ব্যতিক্রমটি ছুঁড়ে ফেলা হচ্ছে ... সঠিক সমস্যাটি জানতে আমি লগিং সিস্টেমটি ব্যবহার করেছি তবে সেই পদ্ধতির জন্য কোনও লগ তৈরি করা হয়নি ... আমি 3 লগ তৈরি করছি 1) পরিষেবাটি আঘাত করলে 2) কোনও ফাইল সংরক্ষণের আগে এবং 3) ব্যতিক্রম লগ।
ব্যবহারকারী3217843

0

ত্রুটি সম্পর্কিত তথ্যটি প্রথমে যেমন বলেছে দয়া করে ক্লায়েন্ট সাইড এবং পরিষেবা উভয় দিকের সময়সীমা মানটি নিম্নলিখিত হিসাবে বাড়ানোর চেষ্টা করুন:

<basicHttpBinding>
    <binding name="basicHttpBinding_ACRMS" maxBufferSize="2147483647"
      maxReceivedMessageSize="2147483647"
      openTimeout="00:20:00" 
      receiveTimeout="00:20:00" closeTimeout="00:20:00"
      sendTimeout="00:20:00">
      <readerQuotas maxDepth="32" maxStringContentLength="2097152"
        maxArrayLength="2097152" maxBytesPerRead="4006" maxNameTableCharCount="16384" />
    </binding>

তারপরে দয়া করে নিম্নলিখিতগুলি করে শেষ পয়েন্টে এই বাঁধাই কনফিগারেশনটি প্রয়োগ করতে ভুলবেন না:

<endpoint address="" binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding_ACRMS"
      contract="MonitorRAM.IService1" />

উপরেরটি যদি সহায়তা না করতে পারে তবে আপনি এখানে আপনার মূল প্রকল্পটি আপলোড করার চেষ্টা করতে পারলে ভাল হবে, তবে আমি আমার পাশ দিয়ে একটি পরীক্ষা করতে চাই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.