私の WCF サービスは、次のように、オブジェクトにラップされた値と DynamicAttributeType 列挙型を指定してフィールドを動的に更新する要求を受け入れることができます。
[DataContract]
[KnownType(typeof(string))]
[KnownType(typeof(bool))]
[KnownType(typeof(PickListInfo))]
public class DynamicAttributeInfo
{
[DataMember]
public string Name { get; set; }
[DataMember]
public object Value { get; set; }
[DataMember]
public DynamicAttributeType DynamicAttributeType { get; set; }
}
これは、.Net クライアントでは問題なく機能します。PHPクライアントが機能するように支援しようとしています。これまでのところ、Object として渡されるものの内部に真の値が含まれているもの (string/bool/PickList) を作成する際に問題が発生しています。
注意: WCF サービスは運用中であり、変更することはできません。PHP クライアントのソリューションを探しています。
彼のさまざまな試みは次のとおりです。
1) 最初の試行 - 単純な文字列を値として:
<?php
$da = new DynamicAttributeInfo();
$da->DynamicAttributeType = 'String';
$da->Name = 'lv_eutmsource';
$da->Value = 'test';
?>
例外: [InnerException] => stdClass オブジェクト ( [HelpLink] => [InnerException] => [Message] => 名前空間 'http://schemas.datacontract.org/2004/07/XXX.XXX からの要素 'Value' の終了.XXXService.Common.Entities' が必要です。テキスト 'test' が見つかりました。2 行目、位置 725。
2) 2 番目のテイク (半成功): 空のクラスの新しいオブジェクト
<?php
class testText() {
}
$da = new DynamicAttributeInfo();
$da->DynamicAttributeType = 'String';
$da->Name = 'lv_eutmsource';
$da->Value = new testText();
?>
今回は WCF 例外はありませんでしたが、実際には値が渡されず、私のコードは "Object.ToString" になってしまいました。
3) その他の試み: 空でないクラス - 彼は別の名前のフィールドを追加しようとしましたが、何も機能しませんでした。
<?php
class Value() {
public $String;
}
$text = new Value();
$text->String = 'test text';
$da = new DynamicAttributeInfo();
$da->DynamicAttributeType = 'String';
$da->Name = 'lv_eutmsource';
$da->Value = $text;
?>
例外: [InnerException] => stdClass オブジェクト ( [HelpLink] => [InnerException] => stdClass オブジェクト ( [HelpLink] => [InnerException] => [Message] => 名前空間 'http:// schemas.datacontract.org/2004/07/XXX.XXX.XXXService.Common.Entities' が必要です。名前空間 '' から要素 'String' が見つかりました。
<?php
class textText() {
public $text;
}
$text = new testText();
$text->text = 'test text';
$da = new DynamicAttributeInfo();
$da->DynamicAttributeType = 'String';
$da->Name = 'lv_eutmsource';
$da->Value = $text;
?>
例外: [InnerException] => stdClass オブジェクト ( [HelpLink] => [InnerException] => stdClass オブジェクト ( [HelpLink] => [InnerException] => [Message] => 名前空間 'http:// schemas.datacontract.org/2004/07/XXX.XXX.XXXService.Common.Entities' が必要です。名前空間 '' から要素 'text' が見つかりました。
<?php
class Value() {
public $Value;
}
$text = new Value();
$text->Value = 'test text';
$da = new DynamicAttributeInfo();
$da->DynamicAttributeType = 'String';
$da->Name = 'lv_eutmsource';
$da->Value = $text;
?>
例外: [InnerException] => stdClass オブジェクト ( [HelpLink] => [InnerException] => stdClass オブジェクト ( [HelpLink] => [InnerException] => [Message] => 名前空間 'http:// schemas.datacontract.org/2004/07/XXX.XXX.XXXService.Common.Entities' が必要です。名前空間 '' から要素 'Value' が見つかりました。