次の方法で共有


方法: エンティティ データをリソースとして挿入する (WCF Data Services)

HTTP POST 要求を使用して新しいデータを WCF Data Services に追加できます。POST 要求は、キー、リンク、ナビゲーション プロパティ、およびサービス操作によって指定されるエンティティ セットに適用できます。詳細については、「POST メソッド (WCF Data Services)」を参照してください。

新しいエンティティを挿入するための POST 要求

POST 要求により挿入されるデータは、HTTP 要求の一部となる文字列として書式設定されます。URI "https://localhost:50781/AdvWksSalesS.svc/Address" の場合、POST 要求は、AdventureWorksModel に設定された Address エンティティを最初に識別します。変更するエンティティが継承階層の一部である場合は、__metadata 構文要素が必要になります。

  "{__metadata:{Uri:'/Address/', " +
      "Type:'AdventureWorksModel.Address'}}"

JSON 構文を使用して Address エンティティ セットの新しいデータ項目を表す例を、この記述の末尾のコード ブロックに示しています。

このコードは、AdventureWorksModel を配置するデータ サービスに新しい Address エンティティを追加します。HttpWebRequest r は、そのコンストラクターの単一のパラメーターとして、挿入するエンティティ型の URI https://localhost:50781/AdvWksSalesS.svc/Address を使用して作成されます。新しい項目のプロパティのデータを構成するいくつかの変数の初期化には、JSON 形式のシリアル化が必要になります。DateTime のシリアル化は複雑な変換であり、JSON コード ライブラリにより管理することが推奨されますが、これにはシリアル化が含まれています。JSON のシリアル化の詳細については、「JSON シリアル化ルール (ADO.NET Data Services)」を参照してください。stateProvinceId に割り当てられた整数と rowGuid に割り当てられた Guid は、requestPayload 文字列のシリアル化でシリアル化されます。

既に解説しているとおり、要求の本文は requestPayload という名前の文字列に割り当てられます。メソッドは "POST" に設定されます。ContentType は json プロトコルに割り当てられます。r.Accept = "application/json" 行は、json プロトコルを使用してエンコードした応答 (応答がある場合) を返すようにサーバーに指示します。

サービスが HTTP 基本認証などのトランスポート ベースの認証スキームで保護されている場合は、資格情報を、要求に割り当てることによって渡すことができます。この例では、DefaultCredentials を使用しています。

要求 r は Unicode テキストとして書式設定されます。要求の Stream オブジェクトにデジタル データを書き込むために、UTF8Encoding 変数を使用して要求の長さ (バイト単位) が取得されます。HttpWebResponse オブジェクトは、要求に対して GetResponse を呼び出すことによって割り当てられます。コード r.GetResponse はデータを送信し、応答を取得します。もう 1 つの Stream オブジェクト rspStm は、GetResponseStream によって返されたデータの格納に使用します。

HttpWebRequest r =
       WebRequest.Create("https://localhost:50781/AdvWksSalesS.svc/Address")
       as HttpWebRequest;

    DateTime creationDate = DateTime.Now;
    // Convert the date to JSON format.long ticks = (creationDate.ToUniversalTime().Ticks - 
  (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks) / 10000;
    Int32 stateProvinceId = 79;
    Guid rowGuid = Guid.NewGuid();

    // __metadata is only required if inheritance is used.string requestPayload = "{__metadata:{Uri:'/Address/', " +
        "Type:'AdventureWorksModel.Address'}, " + 
        "AddressLine1:'703 NW 170th St.', " +
        "City:'Kirkland', StateProvinceID:" + 
        stateProvinceId.ToString() + 
        ", PostalCode:'98021', rowguid:'" + 
        rowGuid.ToString() + 
        "', ModifiedDate:'\\/Date(" + ticks + ")\\/'}";

    r.Method = "POST";
    UTF8Encoding encoding = new UTF8Encoding();
    r.ContentLength = encoding.GetByteCount(requestPayload);
    r.Credentials = CredentialCache.DefaultCredentials;
    r.Accept = "application/json";
    r.ContentType = "application/json";

    //Write the payload to the request body.using ( Stream requestStream = r.GetRequestStream())
    {
        requestStream.Write(encoding.GetBytes(requestPayload), 0,
            encoding.GetByteCount(requestPayload));
    }

    try
    {
        HttpWebResponse response = r.GetResponse() as HttpWebResponse;
        string responseBody = "";
        using (Stream rspStm = response.GetResponseStream())
        {
            using (StreamReader reader = new StreamReader(rspStm))
            {
                textBoxResponse.Text = textBoxResponse.Text + 
                    "Response Description: " + response.StatusDescription;
                textBoxResponse.Text = textBoxResponse.Text + 
                    "Response Status Code: " + response.StatusCode;
                textBoxResponse.Text = textBoxResponse.Text + "\r\n\r\n";
                responseBody = reader.ReadToEnd();
            }
        }
        textBoxResponse.Text = "Success: " + response.StatusCode.ToString();
    }
    catch (System.Net.WebException ex)
    {
        textBoxResponse.Text = textBoxResponse.Text + 
            "Exception message: " + ex.Message;
        textBoxResponse.Text = textBoxResponse.Text + 
            "\r\nResponse Status Code: " + ex.Status;
        textBoxResponse.Text = textBoxResponse.Text + "\r\n\r\n";
        // get error details sent from the server
        StreamReader reader = new StreamReader(ex.Response.GetResponseStream());
        textBoxResponse.Text = textBoxResponse.Text + reader.ReadToEnd();
        
    }

参照

概念

POST メソッド (WCF Data Services)

方法: エンティティ データをリソースとして更新する (WCF Data Services)

方法: リソースからデータを取得する (WCF Data Services)

方法: エンティティ データをリソースとして挿入する (WCF Data Services)

方法: リソースとしてのエンティティ データを削除する (WCF Data Services)

その他の技術情報

一般的な HTTP 要件 (ADO.NET Data Services)

.NET クライアント ライブラリ (ADO.NET Data Services)