次の方法で共有


WCF Data Services によって配置されるデータは、HTTP MERGE 要求により変更できます。データ インスタンスのプロパティのほとんどの値は、メソッドによって変更できますが、データ インスタンスのキー プロパティは変更できません。MERGE 要求は、エンティティ型、リンク、ナビゲーション プロパティ、および複合型に適用できます。詳細については、「MERGE メソッド (WCF Data Services)」を参照してください。

1 つのプロパティを更新するための MERGE 要求

MERGE 要求により変更されるデータは、HTTP 要求の一部となる文字列として書式設定されます。URI "https://localhost:50781/AdvWksSalesS.svc/Address(2)" の場合、MERGE 要求は、AdventureWorksModel 内にある ID=2 の Address エンティティを最初に識別します。Address エンティティの AddressLine1 プロパティに対する変更は、構文 "{AddressLine1:'1600 1st St.'}" で指定します。変更するエンティティが継承階層の一部である場合は、__metadata 構文要素が必要になります。

  "{__metadata:{Uri:'/Address(2)/', " +
      "Type:'AdventureWorksModel.Address'}, " +
      "AddressLine1:'500 5th St.'}"

JSON 構文を使用して AddressLine1 プロパティの更新データを表す完全な例を、この記述の末尾のコード ブロックに示しています。

このコードは、AdventureWorksModel の Address エンティティの AddressLine1 プロパティを更新します。HttpWebRequest r は、そのコンストラクターの単一のパラメーターとして、変更するエンティティの URI https://localhost:50781/AdvWksSalesS.svc/Address(2) を使用して作成されます。既に解説しているとおり、要求の本文は requestPayload という名前の文字列に割り当てられます。メソッドは "MERGE" に設定されます。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(2)")
       as HttpWebRequest;

    // __metadata is only required if inheritance is used,
    // but __metadata syntax is used for completeness.Simple syntax:
    //string requestPayload = "{AddressLine1:'1600 1st St.'}";

    string requestPayload = "{__metadata:{Uri:'/Address(2)/', " +
        "Type:'AdventureWorksModel.Address'}, " +
        "AddressLine1: '1600 1st St.'}";

    r.Method = "MERGE";
    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();
        
    }

参照

概念

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

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

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

その他の技術情報

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

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

Entity Data Model (EDM)