2010-03-31 77 views
1

我試圖通過消息檢查器在消息的標題中傳輸一些用戶信息。如何通過WCF中的標題傳輸對象

我創建了一個將檢查器添加到服務(客戶端和服務器)的行爲。

但是當我嘗試與服務,我碰到下面的錯誤進行通信:

XmlException:
名稱不能以「<」字符,十六進制值開始爲0x3C。

我也得到異常告訴我,DataContracts出乎意料。

Type 'System.DelegateSerializationHolder+DelegateEntry' with data contract name 'DelegateSerializationHolder.DelegateEntry: http://schemas.datacontract.org/2004/07/System ' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

的事情是,我的對象包含了被標記爲DataContract其他的目的和我沒有興趣加入這些類型的KnownType屬性。

另一個問題可能是我的對象序列化是在內部類和內部性能等的形式非常有限

任何人都可以指導我在正確的方向。我做錯了什麼?

一些代碼:

public virtual object BeforeSendRequest(ref Message request, IClientChannel channel) 
{ 
    var header = MessageHeader.CreateHeader("<name>", "<namespace>", object); 
    request.Headers.Add(header); 

    return Guid.NewGuid(); 
} 

回答

0

要關閉這個問題,我從來沒有解決過這個問題。相反,我實施了ISerializable,這對我非常有用。

1

不要將尖括號到實際的字符串。請記住,序列化格式甚至可能不是基於文本的,您所做的只是指定元素的名稱和名稱空間。所以你的代碼應該看起來更像這樣:

var header = MessageHeader.CreateHeader("name", "urn:myNamespace", object); 
request.Headers.Add(header); 
+0

對不起,誤解,但尖括號裏只是爲了說明它是一些名稱和一些命名空間。我可以看到關於錯誤消息的混淆。不,實際代碼沒有尖括號,但名稱空間是http:// formattet名稱空間。 – Michael 2010-04-06 06:40:37