我的WCF服務可以接受請求,通過傳遞包裹在一個對象的值和DynamicAttributeType枚舉指定類型,像這樣動態更新場:如何序列化PHP中的「對象」類型以發送到WCF服務?
[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] =>結束元素值'names''http://schemas.datacontract.org/2004/07/XXX.XXX.XXXService.Common.Entities'expected。Found text'test'第2行,位置725.
2)第二卷帶(半成功):空類
<?php
class testText() {
}
$da = new DynamicAttributeInfo();
$da->DynamicAttributeType = 'String';
$da->Name = 'lv_eutmsource';
$da->Value = new testText();
?>
的新對象有沒有WCF例外這段時間,但沒有價值實際上是通過和我的代碼結束了「對象。的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] => [消息] =>從命名空間'http://schemas.datacontract.org/2004/07/XXX.XXX.XXXService.Common.Entities'預期的結束元素'Value'從名字空間''找到元素'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] => [信息] =>最終元件'值'來自命名空間'http://schemas.datacontract.org/2004/07/XXX.XXX.XXXService.Common.Entities'。從命名空間''找到元素'文本'。
<?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] => [消息] =>從命名空間'http://schemas.datacontract.org/2004/07/XXX.XXX.XXXService.Common.Entities'預期的結束元素'Value'。從命名空間''找到元素'Value'。
你顯然已經連接到WCF服務工作,但你應該添加你如何實際序列化你的對象。另外,您是否分析了序列化輸出並將其與Microsoft的規範進行了比較? – dualed