Azure টেবিল স্টোরেজ 400 খারাপ অনুরোধ প্রদান করে


119

আমি এটি ডিবাগ মোডে চালিত করেছি, এবং আমি ব্যতিক্রমের বিবরণ সহ একটি চিত্র সংযুক্ত করি। আমি কীভাবে জানতে পারি যে কী ভুল হয়েছে? আমি একটি টেবিলে ডেটা ইনসেট করার চেষ্টা করছিলাম। আমাকে আরও বিশদ দিতে না পারি না?

ওবস: স্টোরেজটি আমার মেশিনে নেই উইন্ডোজ অজুরে। সারণী তৈরি করা হয়েছিল, তবে ডেটা inোকানোর সময় আমি এই ত্রুটিটি পেয়েছি

এখানে চিত্র বর্ণনা লিখুন

// Retrieve the storage account from the connection string.
Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***");

// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

// Create the table if it doesn't exist.
CloudTable table = tableClient.GetTableReference("EmployeeOnlineHistory");
table.CreateIfNotExists();

এবং এখানে সন্নিবেশ কোডটি:

public static void SetStatus(Employee e, bool value)
{
    try
    {
        // Retrieve the storage account from the connection string.
        Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=###;AccountKey=###");

        // Create the table client.
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

        // Create the CloudTable object that represents the "people" table.
        CloudTable table = tableClient.GetTableReference("EmployeeOnlineHistory");

        // Create a new customer entity.

        if (value == true)
        {
            EmployeeOnlineHistory empHistory = new EmployeeOnlineHistory(e.Id);
            empHistory.IsOnline = true;
            empHistory.OnlineTimestamp = DateTime.Now;
            TableOperation insertOperation = TableOperation.Insert(empHistory);
            table.Execute(insertOperation);
        }
        else
        {
            TableQuery<EmployeeOnlineHistory> query = new TableQuery<EmployeeOnlineHistory>()
                .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, e.Id.ToString()));
            EmployeeOnlineHistory entity = table.ExecuteQuery(query).Take(1).FirstOrDefault();

            if ((entity!=null)&&(entity.IsOnline))
            {
                entity.IsOnline = false;
                entity.OfflineTimestamp = DateTime.Now;
                entity.OnlineTime = (entity.OfflineTimestamp - entity.OnlineTimestamp);
                TableOperation updateOperation = TableOperation.Replace(entity);
                table.Execute(updateOperation);
            }
            else
            {
                EmployeeOnlineHistory empHistory = new EmployeeOnlineHistory(e.Id);
                empHistory.IsOnline = false;
                empHistory.OfflineTimestamp = DateTime.Now;
                TableOperation insertOperation = TableOperation.Insert(empHistory);
                table.Execute(insertOperation);
            }
        }
    }
    catch (Exception ex)
    {
        //var details = new System.IO.StreamReader(((Microsoft.WindowsAzure.Storage.StorageException)ex)..Response.GetResponseStream()).ReadToEnd();
        LogFile.Error("EmployeeOnlineHistory.setStatus",ex);
    }
}

এই চিত্রটি 400 টির ত্রুটি নিশ্চিত করে সত্যই সহায়তা করে না Would আপনি যে কোডটি সম্পাদন করেছেন তাতে খারাপ অনুরোধের ফলশ্রুতিতে সহায়তা করা হবে: আপনি কীভাবে স্টোরেজ ক্লায়েন্ট সেট আপ করেছেন, কীভাবে আপনি টেবিলটি সেট আপ করেছেন, তারপরে যান ইত্যাদি
toোকাতে

আমি কোডটি কপি-পেস্ট করেছি। আশা করি এটি সহায়তা করে
রায়ান

আপনি যদি বলেন যে বেশ কয়েকটি ক্ষেত্রে কোনটি ব্যর্থ হচ্ছে It এছাড়াও, আপনি স্পষ্টতই এই কোডের বাইরে কিছু সম্পত্তি সেট করছেন (যেমন, পার্টিশনকি এবং রোউকি) সুতরাং এটি কী এবং কী সেগুলিতে সেট করা হচ্ছে তা জানতে সহায়তা করবে।
ব্রায়ান রিশাল

আমি লক্ষ্য করেছি যে ব্যতিক্রমটি প্রথমে নিক্ষেপ করা হলে, "ভিউ ডিটেইল" বিকল্প নেই তবে আপনি যখন ডিবাগিং চালিয়ে যান এবং প্রবাহটি কলারটিতে ফিরে যায় (যেখানে ব্যতিক্রমটি আবার পপ আপ হয়), আপনি বিশদ বিবরণ বিকল্পটি দেখতে পাবেন। সেখান থেকে আপনি ত্রুটিটি সনাক্ত করতে @ জুহা পালোমকি'র উত্তরটি ব্যবহার করতে পারেন
raghav710

উত্তর:


148

400 ত্রুটি বলতে বোঝায় যে আপনার কোনও বৈশিষ্ট্যের মান নিয়ে কিছু ভুল আছে। ফিডলারের মাধ্যমে অনুরোধ / প্রতিক্রিয়াটি সন্ধান করা এবং উইন্ডোজ আজুর স্টোরেজে প্রকৃত ডেটা প্রেরণ করা হচ্ছে তা খুঁজে বের করার একটি উপায়।

একটি বন্য অনুমান নিয়ে, আমি আপনার কোডটিতে এক ঝলক দেখে ধরে নিচ্ছি যে আপনার মডেলটিতে আপনার কাছে কিছু তারিখ / সময় ধরণের বৈশিষ্ট্য রয়েছে (অফলাইনটাইমস্ট্যাম্প, অনলাইনটাইমস্ট্যাম্প) এবং লক্ষ্য করেছেন যে কিছু পরিস্থিতিতে তাদের মধ্যে একটি ডিফল্ট মান দিয়ে শুরু করা হয় যা " ডেটটাইম.মিনভ্যালু "। দয়া করে মনে রাখবেন যে তারিখ / সময় ধরণের বৈশিষ্ট্যের জন্য অনুমোদিত ন্যূনতম মানটি জানুয়ারী 1, 1601 (ইউটিসি) উইন্ডোজ আজুরে [http://msdn.microsoft.com/en-us/library/windowsazure/dd179338.aspx] । দয়া করে দেখুন এটি না হলে। যদি কেসটি হয়, তবে আপনি এগুলি এড়ানোরযোগ্য ক্ষেত্র তৈরি করতে পারেন যাতে তারা ডিফল্ট মানগুলির সাথে জনবসতি না হয়।

নীচে জুহা পালোমাকির উত্তরটিও দেখুন ... কখনও কখনও তিনি ব্যতীত কিছুটা বেশি দরকারী বার্তা আসে যেখানে তিনি প্রস্তাব করেন (অনুরোধের তথ্য.এক্সটেন্ডেড এরিওর ইনফরমেশন.এরআরমেসেজ)


259
Godশ্বরের ভালবাসার জন্য, যদি আজুর দল থেকে কেউ এটি পড়েন, দয়া করে এসডিকে 400 খারাপ অনুরোধ ত্রুটির চেয়ে আরও বেশি তথ্য ফিরিয়ে দিন। টেবিল স্টোরেজে থাকা ডেটটাইম কেন। নেট ডেটটাইম অবজেক্টের মতো ন্যূনতম তারিখ থাকতে পারে না তা আমার কোনও ধারণা নেই তবে আমি এটির জন্য একটি ভাল দিন নষ্ট করেছি। কোন সম্পত্তির কারণে সমস্যাটি নেমে যাওয়ার সময় আমি এগুলিও পেরেছিলাম, যা সাহায্য করেছিল। এখন, আমি টেবিল স্টোরেজের জন্য ডেটটাইম সহ কোনও মডেল সন্নিবেশ / আপডেট করার আগে, আমাকে সমস্ত ডেটটাইম বৈশিষ্ট্যগুলিতে চেক চালাতে হবে। আদর্শ নয় ...
মাইকেল

8
যখন আমরা এটি করছি তখন আপনার এনাম সম্পত্তিও থাকতে পারে না। আমাকে সম্পত্তিটি পূর্ণসংখ্যায় রূপান্তর করতে হয়েছিল
মার্টিন

15
স্পষ্টতই, টেবিলের নামগুলিতে হাইফেনও থাকতে পারে না। এটি বের করার জন্য আমাকে এক ঘন্টা সময় নিয়েছে।
আমোগ নাটু

4
সারণীর নামগুলিতেও আন্ডারস্কোর থাকতে পারে না সেজন্য আমি এখানে আছি
Quango

2
আমি ভেবেছিলাম রউকি ফাঁকা স্ট্রিং দিয়ে আরম্ভ করা হয়নি কারণ এটি মূল অনুসন্ধানের মান এবং কেবল সূচকযুক্ত কলাম ... এটি আপনাকে মনে করিয়ে দেওয়ার কথা মনে করিয়ে দেওয়ার জন্য .... এটি কেবল আমার অনুমান তবে ... যতদূর টেবিলের নামগুলি যান .. এটির
জেএমস্টল/

129

স্টোরেজ এক্সেপশনটিতে ত্রুটি সম্পর্কে আরও কিছুটা বিশদ তথ্য রয়েছে।

ডিবাগারটি চেক করুন: স্টোরেজএক্সেপশন eউইকুয়েস্টইনফরমেশন.এক্সেন্ডেন্ডড ইনফরমেশন

এখানে চিত্র বর্ণনা লিখুন


6
কেন এই তথ্য শীর্ষ স্তরের ব্যতিক্রম নয়?
উইলকো ভ্যান ডার

আমার জন্য এটি হাইলাইট করা হয়েছে .. "এমুলেটর দ্বারা সমর্থিত ব্লব" .. এফএমএল
মিশেল কর্নিল

The specifed resource name contains invalid characters.আমার টেবিলের নামটিতে ড্যাশ ছিল ... ঠিক আমার কাতার নামের মতো ... দীর্ঘশ্বাস ফেলল। আশা করি অনুসন্ধান আরও বেশি লোকের জন্য এটিকে পছন্দ করে! দেখুন: stackoverflow.com/questions/45305556/...
Nateous

55

আমার ক্ষেত্রে এটি রাউকিতে একটি ফরোয়ার্ড স্ল্যাশ ছিল ।

আমি একটি 'আউটআফরেঞ্জইনপুটও পেয়েছি - অনুরোধ ইনপুটগুলির মধ্যে একটি সীমার বাইরে।' স্টোরেজ এমুলেটারের মাধ্যমে ম্যানুয়ালি যোগ করার চেষ্টা করার সময় ত্রুটি।

মূল ক্ষেত্রগুলিতে অক্ষরগুলি অনুমোদিত নয়

পার্টিশনকি এবং রোউকি বৈশিষ্ট্যের জন্য নিম্নলিখিত অক্ষরগুলিকে মানগুলিতে অনুমোদিত নয় :

  • ফরোয়ার্ড স্ল্যাশ ( / ) অক্ষর
  • ব্যাকস্ল্যাশ ( \ ) অক্ষর
  • সংখ্যা চিহ্ন ( # ) অক্ষর
  • প্রশ্ন চিহ্ন ( ? ) চরিত্র
  • U + 0000 থেকে U + 001F পর্যন্ত অক্ষরগুলি নিয়ন্ত্রণ করুন :
    • অনুভূমিক ট্যাব ( \ t ) অক্ষর
    • লাইনফিড ( \ n ) অক্ষর
    • ক্যারেজ রিটার্ন ( \ r ) অক্ষর
    • U + 007F থেকে U + 009F পর্যন্ত অক্ষরগুলি নিয়ন্ত্রণ করুন

http://msdn.microsoft.com/en-us/library/dd179338.aspx

আমার জন্য এটি হ্যান্ডেল করার জন্য আমি একটি এক্সটেনশন পদ্ধতি লিখেছিলাম।

public static string ToAzureKeyString(this string str)
{
    var sb = new StringBuilder();
    foreach (var c in str
        .Where(c => c != '/'
                    && c != '\\'
                    && c != '#'
                    && c != '/'
                    && c != '?'
                    && !char.IsControl(c)))
        sb.Append(c);
    return sb.ToString();
}

4
এটি আমার সমস্যাও ছিল। আপনার এক্সটেনশন পদ্ধতিটি চ্যাম্পের মতো কাজ করে!
জেমস উইলসন

1
আমি এক্সটেনশন পদ্ধতিটি পছন্দ করতাম। আমাকে বাঁচিয়েছে
নিউটন শেখ

বিকল্প প্রতিক্রিয়া এখানে দেওয়া যা Regex প্রতিস্থাপন করে stackoverflow.com/a/28788382/285795
ΩmegaMan

এটা আমার জন্য স্থির। আমার একটি ফরোয়ার্ড স্ল্যাশ ছিল সিউডো যৌগিক কীটির জন্য একটি ভাল চরিত্রের মতো মনে হয়েছিল।
রিচার্ড

এই এক্সটেনশন পদ্ধতিটি অনুমোদিত নয় এমন বেশ কয়েকটি পাঠককে সরিয়ে দিচ্ছে না। উদাহরণস্বরূপ: স্পেস, "(", ")" ... ডকস.মাইক্রোসফটকম
টিয়াগো আন্দ্রেড ই সিলভা

6

আমি একই সমস্যার মুখোমুখি হয়েছিলাম তবে আমার ক্ষেত্রে কারণটি ছিল আকারের কারণে। অতিরিক্ত ব্যতিক্রম বৈশিষ্ট্যগুলিতে খনন করার পরে (অনুরোধের তথ্য.একটি এক্সটেন্ডেড এরিওর তথ্য), কারণটি খুঁজে পেয়েছেন:

ত্রুটি কোড: প্রপার্টিভ্যালু টু লার্জ ত্রুটিযুক্তি: সম্পত্তি মান সর্বাধিক অনুমোদিত আকার (K৪ কেবি) ছাড়িয়েছে। সম্পত্তির মানটি যদি একটি স্ট্রিং হয় তবে এটি ইউটিএফ -16 এনকোডযুক্ত এবং অক্ষরের সর্বাধিক সংখ্যা 32 কে বা তার চেয়ে কম হওয়া উচিত।


5

ভাল, আমার ক্ষেত্রে আমি এটি করার চেষ্টা করছিলাম:

CloudBlobContainer container = blobClient.GetContainerReference("SessionMaterials");
await container.CreateIfNotExistsAsync();

কনটেইনারনেমের কারণে SessionMaterials(পাস্কেল কেস এবং উট কেস: D তে অভ্যেস রচনার অভ্যাস হিসাবে) এটি 400 টি খারাপ অনুরোধ ঘটাচ্ছে। সুতরাং, আমি এটি তৈরি করতে হবে sessionmaterials। এবং এটা কাজ করে.

আশা করি এটি কিছুটা সাহায্য করবে।

পিএস: - কেবল ব্যতিক্রম HTTP প্রতিক্রিয়া পরীক্ষা করুন বা অনুরোধ এবং প্রতিক্রিয়া ক্যাপচার করতে ফিডলারটি ব্যবহার করুন।


3

আমার ক্ষেত্রে: ধারকটির নাম মূলধনীতে ছিল। চরগুলি ব্যবহার করার সময় সীমাবদ্ধতা রয়েছে। এখানে চিত্র বর্ণনা লিখুন


এটি টেবিলের সম্পত্তি নামগুলির জন্যও যায়।
আইয়েন বলার্ড


1

সমস্ত টেবিল পরিষেবা ত্রুটি কোডগুলি সম্পর্কে এমএসের একটি ডকুমেন্টেশন এখানে পাওয়া যাবে


1

আমার একই BadRequest (400) ত্রুটি ছিল, শেষে আমি ম্যানুয়ালি পূরণ করব:

এখানে চিত্র বর্ণনা লিখুন

এবং আমার জন্য কাজ। আশাকরি এটা সাহায্য করবে!


এই উত্তরটি সঠিক। আমি প্রায় এক ঘন্টা নষ্ট করেছিলাম এবং এটি সুর দেয় যে এমনকি Timestampম্যানুয়ালিও উত্পন্ন করা উচিত। এটা আসলে খুব বিরক্তিকর.
রোমান কলিদা

0

আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি। আমার ক্ষেত্রে পার্টিশনকি মান নির্ধারণ করা হয়নি, সুতরাং ডিফল্টরূপে পার্টিশনকির মানটি শূন্য ছিল, যার ফলস্বরূপObject reference not set to an instance of an object. ব্যতিক্রম হয়েছিল

আপনি পার্টিশনকি বা রোউকির জন্য উপযুক্ত মান সরবরাহ করছেন কিনা তা পরীক্ষা করে দেখুন, আপনি এ জাতীয় সমস্যার মুখোমুখি হতে পারেন।


0

আমি আমার মামলাগুলি স্থির করেছিলাম এবং এটি ঠিকঠাক কাজ করেছে

আমার মামলাগুলি:

  1. সারি কীটি সঠিক ফর্ম্যাটে নয় (400)।
  2. পার্টিশনকি এবং রোউকি সংমিশ্রণটি অনন্য নয় (409)।

0

আমি একটি 400 বাজে অনুরোধ পাচ্ছিলাম কারণ আমি জেডআরএস (জোন রিডানড্যান্ট স্টোরেজ) ব্যবহার করছিলাম এবং বিশ্লেষণ এই ধরণের স্টোরেজের জন্য উপলভ্য নয়। আমি জানতাম না যে আমি অ্যানালিটিক্স ব্যবহার করছি।

আমি স্টোরেজ ধারকটি মুছলাম এবং জিআরএস হিসাবে পুনরায় তৈরি করেছি এবং এখন এটি ঠিক আছে।


0

আমি একটি (৪০০) খারাপ অনুরোধ, স্ট্যাটাসমেসেজ: খারাপ অনুরোধ, ত্রুটি কোড: আউট অফরেঞ্জইনপুট পেয়েছি যখন সত্তার কোনও সম্পত্তি তারিখের সময় সেট করা হয়নি (= ডেটটাইম.মিনভ্যালু)


0

আমার ক্ষেত্রে: আমি ব্লফ মেটাডেটা অন্তর্ভুক্ত করেছি একটি হাইফেনযুক্ত ট্যাগ নামের সাথে।

var blob = container.GetBlockBlobReference(filename);
blob.Metadata.Add("added-by", Environment.UserName);
//.. other metadata
blob.UploadFromStream(filestream);

ড্যাশ ইন "added-by"সমস্যা ছিল এবং পরে আরটিএফএম আমাকে বলেছিল যে ট্যাগের নাম অবশ্যই সি # সনাক্তকারী কনভেনশনগুলির সাথে মানিয়ে নিতে পারে।

সূত্র: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-properties-metadata

ইন্ডস্কোর ঠিকঠাক কাজ করে।


0

আমার ক্ষেত্রে, আমার সত্তা শ্রেণিতে পার্টিশনকি এবং রাউকি যুক্ত করা উচিত নয়। এটি বেস শ্রেণীর হতে হবে। নীচে শুধু কাজ করবে।

public class TableRunLogMessage:TableEntity
{
      public string status { get; set; }
      public long logged { get; set; }


      public TableRunLogMessage() { }
}

0

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

নোডজেএসের সাথে সহজ উপায় হল দুটি পরিবেশগত ভেরিয়েবল সেট করা:

NODE_TLS_REJECT_UNAUTHORIZED=0
This disables SSL checks so you can intercept your own SSL requests. This leaves you open to Man-in-The-Middle attacks and should NEVER make it to production, and I wouldn't even leave it in development for long. However, it will allow you to intercept the HTTP Requests.

HTTP_PROXY=http://127.0.0.1:8888
This sets node to utilize a proxy listening on your localhost at port 8888. Port 8888 is the default for Fiddler. Many other proxies default to 8080.

আপনি যদি সত্যিই সি # ব্যবহার করছেন তবে এই পোস্টের লেখক যেমন করছেন; আপনি কেবল ফিডলার ইনস্টল করতে পারেন এবং এটিকে বাধা দিতে সেট করতে পারেন। ডিফল্টরূপে এটি অনুরোধগুলি বাধা দেওয়া উচিত। আপনারও ফিডলারের শংসাপত্রের উপর আস্থা রাখতে বা অন্যথায় নোডের "NODE_TLS_REJECT_UNAUTHORIZED = 0" এর সমপরিমাণ করতে হবে।


0

আমি আজুর স্টোরেজ অ্যাকাউন্ট সারণী এপিআই থেকে 400-ব্যাডরেউকস্ট প্রতিক্রিয়া পেয়েছি। ব্যতিক্রম তথ্য দেখিয়েছে যে "অ্যাকাউন্টটি অ্যাক্সেস করা হচ্ছে তা http সমর্থন করে না"। আমি অনুভব করেছি যে নীচের চিত্রটিতে প্রদর্শিত হিসাবে স্টোরেজ অ্যাকাউন্ট কনফিগারেশনে "নিরাপদ স্থানান্তর প্রয়োজনীয়" সক্ষম করা হলে আমাদের অবশ্যই সংযোগের স্ট্রিংয়ে https ব্যবহার করতে হবে।এখানে চিত্র বর্ণনা লিখুন


0

আমার ক্ষেত্রে "টেবিলবটডাটাস্টোর" শ্রেণির নতুন নতুন ইনস্টলেশন (এমএস বট ফ্রেমওয়ার্ক) তৈরি করার জন্য আমরা "টেস্টনাম" প্যারামিটারটি হাইফেন সহ "মাস্টার-বট" এবং টেবিলবটডাটাস্টোরের কেবলমাত্র অক্ষর এবং সংখ্যা সহ টেবিলের নাম রাখতে পারি


0

আমার একই সমস্যা ছিল, ফাংশনটি containerNameKeyস্ট্রিং হিসাবে পাস করছিল । নীচে কোডটি ত্রুটি দিয়েছে

container = blobClient.GetContainerReference(containerNameKey) 

আমি এটা পরিবর্তন

container = blobClient.GetContainerReference(ConfigurationManager.AppSettings(containerNameKey).ToString()) 

এটা কাজ করেছে

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